Как соотносятся Rails и Jruby?

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

Вопросы:

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

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

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

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


person anxiety    schedule 28.07.2010    source источник


Ответы (2)


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

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

person Mark Thomas    schedule 30.07.2010
comment
Если бы вы могли дать мне с чего начать движение по этому проспекту, я был бы очень признателен. - person anxiety; 31.07.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 не нужно прерывать или подвергать риску.

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

person bjg    schedule 28.07.2010
comment
Спасибо за ответ. Не могли бы вы немного расширить свой второй абзац? Этот вариант кажется более приемлемым для моей ситуации. - person anxiety; 29.07.2010