Использовать JRuby для веб-приложений на Ruby? Стоит ли оно того? - PullRequest
14 голосов
/ 30 мая 2009

Справочная информация: Я пишу «стандартное» (ничего особенного) веб-приложение на Ruby (не Rails), и мне нужно начать думать о развертывании.

Итак, я слышал много рекомендаций по использованию JRuby для развертывания веб-приложений Ruby, независимо от того, нужны ли вам библиотеки Java или нет. Насколько это правда? Стоит ли использовать реализацию Java только для скорости? Получу ли я что-нибудь еще от этого? Буду ли я сталкиваться с какими-либо проблемами?

PS: Я не очень хорошо знаю Java, поэтому «вы можете писать ее части на Java» не очень полезно.

Ответы [ 2 ]

22 голосов
/ 30 мая 2009

JRuby - одна из самых полных реализаций ruby ​​(есть много других, таких как IronRuby, Maglev, Rubinius, XRuby, YARV, MacRuby). Он очень всеобъемлющий, поэтому, если вы не используете гемы, которые используют нативный код на языке C, вы, скорее всего, будете просто прекрасны в плане совместимости.

JRuby немного быстрее, чем фактическая реализация C, но поддерживает реальные потоки, в то время как официальная реализация немного пытается получить ее (она все еще использует Green Threads ). Использование потоков Java из JRuby довольно тривиально, даже если вам потребуется соединить ваш код с Java (хотя с небольшим DI это соединение произойдет только один раз).

Еще одно преимущество: инструменты времени выполнения. Java как платформа вместо языка имеет lot инструментов времени выполнения, которые помогут вам диагностировать проблемы и проверять состояние приложения (профилировщики, JConsole и т. Д.) .

Twitter инженеры также отметили, что Ruby VM своего рода испытывает затруднения, будучи средой для долгоживущих процессов , в то время как JVM очень хороша в этом, потому что она оптимизирована за это за последние десять лет .

В последнее время в Ruby также возникла небольшая проблема с безопасностью, которая не повлияла на реализацию JRuby.

С другой стороны, вашему проекту требуются дополнительные артефакты (JVM, JRuby jar и т. Д.). Если вы используете приложение, которое будет работать долго, и вам нужна лучшая поддержка во время выполнения, JRuby может стать отличным вариантом. В противном случае вы можете спокойно подождать, пока вам не понадобятся эти вещи, чтобы сделать ход (скорее всего, все пройдет гладко).

6 голосов
/ 01 июня 2009

Я использую и люблю JRuby ежедневно, но я предлагаю вам использовать MRI (a.k.a. C-Ruby), если у вас нет реальной необходимости в JRuby.

Причины использования JRuby:

  1. Java интеграция
  2. Ограниченная среда (на вашем компьютере установлена ​​Java не по ruby, а у вас нет root)
  3. Ограниченная среда (у вас установлен ruby, но у вас нет root, поэтому вы не можете установить нужные гемы)
  4. Вы достигли предела производительности Ruby 1.8 и не можете использовать 1.9

Из того, что вы описали, у вас нет ни одной из перечисленных выше причин.

C-Ruby 1.9 значительно улучшил производительность по сравнению с C-Ruby 1.8. Я еще не читал (или не узнал сам), как C-Ruby 1.9 сравнивается с JRuby 1.8 или JRuby 1.9. В любом случае у вас нет проблем с производительностью (пока), поэтому не беспокойтесь об этом.

Хорошая новость в том, что вы можете начать с любого из них и конвертировать позже, если это будет необходимо. Это все Ruby, а гемы Webrick и Mongrel работают с обоими.

Как упоминалось выше, рубиновые гемы с расширениями C не могут быть установлены под JRuby. Надеюсь, это изменится в будущем, если расширения ruby ​​C будут использовать FFI.

http://kenai.com/projects/ruby-ffi/pages/Home

http://isitjruby.com/

...