Как связаны Rails и Jruby? - PullRequest
       20

Как связаны Rails и Jruby?

0 голосов
/ 29 июля 2010

Справочная информация: У меня есть библиотека Java, к которой обращаются многие разработчики - обычно через Java.Однако некоторые разработчики надеются получить доступ к этому через Ruby API.Я тяготею к Jruby, чтобы реализовать Java-Ruby API.

Вопросы:

  1. Моя главная проблема заключается в том, что этиразработчики не смогут использовать API в своей текущей среде разработки Ruby on Rails;но вместо этого придется работать в среде рельсов Jruby.Будет ли это так?

  2. Возможно, мне не хватает связи между Jruby и Ruby on Rails.Но кажется, что вы можете либо работать в Rails, либо работать в рельсах Jruby - это технически две разные среды разработки?

Я был бы очень признателен за любой свет, который кто-то мог бы пролить на это ..

Редактировать : заставить разработчиков (на самом деле клиентов быть более конкретными)вносить большие изменения в свои проекты, чтобы приспособиться к этому API, на самом деле не вариант.Итак, если бы их приложения на Rails пришлось преобразовать в приложения Jruby на Rails, то, возможно, кто-то мог бы предложить для меня еще одну альтернативу (кроме Jruby)?

Ответы [ 2 ]

1 голос
/ 30 июля 2010

Во-первых, я должен отметить, что Ruby on Rails - это просто код Ruby, и этот же код может выполняться в среде JRuby (на JVM) или во время выполнения MRI (написано на C).

Однако только JRuby может загружать классы Java и использовать API Java. Просить ваших клиентов переключить их среду развертывания на JRuby может быть неосуществимо, но если вы сможете настроить сервис на Java, который говорит на XML или JSON, тогда они смогут легко использовать его из Rails.

1 голос
/ 29 июля 2010

Вы можете найти ответы на подобный вопрос полезными. В зависимости от вашего приложения может быть возможно без проблем портировать ваше приложение RoR для запуска на JRuby с учетом предостережений, отмеченных в этом ответе. Но вы хотите быть уверены, что выгоды от этого уравновешивают усилия и потенциальные риски.

В качестве альтернативы вы могли бы рассмотреть возможность сделать эти средства библиотеки Java доступными для вашего приложения MRI Rails в качестве внутренней веб-службы (которая может быть Rails или Sinatra или аналогичной), построенной на JRuby. Таким образом, вы могли бы отделить элементы и снизить риск проекта. Если вы впоследствии освоились с этой работой, вы можете подумать о том, чтобы свести их вместе, и все это под JRuby-on-Rails, если это имело смысл.

ОБНОВЛЕНИЕ : Добавление более подробной информации по запросу спрашивающих

Поскольку я не знаком с тем, что делают ваше приложение или библиотеки Java, это будет несколько абстрактно, но я надеюсь, что вы можете заполнить пробелы в соответствии со своими потребностями.

Кажется, что полный перенос ваших Rails-приложений на Jruby невозможен. Хорошо. Поэтому одной идеей было бы представить вашу библиотеку Java в качестве веб-службы (например, RESTful) для вашего приложения RoR. Давайте назовем эту вещь JLS. В этом случае он будет работать как сетевой сервис Java или Jruby, прислушиваться к запросам, звонить в библиотеку и отправлять ответные ответы (здесь обычно махают руками, но вы понимаете):

В зависимости от того, с чем ваши разработчики чувствуют себя более комфортно, вы можете создать JLS в Java, используя контейнер сервлетов. Или вы можете разработать JLS на Ruby, работающем на Jruby (связывание с вашей библиотекой Java), и использовать для этого такую ​​среду, как Rails или Sinatra.

Со стороны RoR, если вы сделали JLS RESTful (и я не знаю, подходит ли это даже в вашем случае), вы можете использовать средство ActiveResource для связи с JLS.

Таким образом, приложение RoR и JLS работают в разных пространствах памяти (возможно, даже на разных хостах). Каждое из них может быть разработано несколько независимо (с конечно же соглашением об интерфейсе RESTful), и ваше приложение RoR не должно быть нарушено или подвергнуто риску.

Этот предложенный вариант поставляется с тоннами мелкого шрифта, но я надеюсь, что вы получите общее представление.

...