Использовать JRuby для веб-приложений Ruby? Стоит ли оно того?
Фон: Я пишу "стандартное" (ничего особенного) веб-приложение в Ruby (not Rails), и мне нужно начать думать о развертывании.
Итак, я слышал много рекомендаций по использованию JRuby для развертывания веб-приложений Ruby, независимо от того, нужны ли вам на самом деле библиотеки Java или нет. Насколько это верно? Стоит ли использовать реализацию Java только для скорости? Могу ли я получить что-нибудь еще, сделав это? Я столкнулся с какими-либо проблемами?
PS: Я не очень хорошо знаю Java, поэтому "вы можете писать части этого в Java" не очень полезно.
Ответы
Ответ 1
JRuby - одна из самых полных реализаций Ruby (там много других, таких как IronRuby, Maglev, Rubinius, XRuby, YARV, MacRuby). Поэтому он очень всеобъемлющий, если вы не используете драгоценные камни, которые используют собственный C-код, вы, скорее всего, будете в полной мере совместимы.
JRuby немного быстрее, чем фактическая реализация C, но поддерживает фактические потоки, тогда как официальная реализация немного усложняет ее получение (она все еще использует Зеленые темы). Использование потоков Java из JRuby довольно тривиально, хотя вам потребуется связать ваш код с Java (с небольшим DI, эта связь будет только один раз, хотя).
Еще одно преимущество: инструменты времени исполнения. Java, как платформа, а не язык, имеет много средств выполнения, которые помогают диагностировать проблемы и проверять состояние приложения (профилировщики, JConsole и т.д.).
Twitter инженеры также отметили, что у Ruby VM есть проблемы, являющиеся средой для долгоживущих процессов, в то время как JVM очень хорош при этом, поскольку он был оптимизирован для этого в течение последних десяти лет.
В Ruby также появилась небольшая проблема безопасности, которая не повлияла на реализацию JRuby.
С другой стороны, ваш проект требует больше артефактов (JVM, JRuby jars и т.д.). Если вы используете приложение, которое останется в живых долгое время, и вы хотите улучшить поддержку во время выполнения, JRuby может стать отличным способом. В противном случае вы можете спокойно подождать, пока вам не понадобятся эти вещи, чтобы сделать ход (он, скорее всего, пройдет гладко).
Ответ 2
Я использую и люблю JRuby на ежедневной основе, но я предлагаю вам использовать МРТ (a.k.a. C-Ruby), если у вас нет реальной потребности в JRuby.
Причины использования JRuby:
- Интеграция с Java
- Ограниченная среда (на вашем компьютере установлена Java не рубином, а у вас нет root)
- Ограниченная среда (у вас установлен рубин, но у вас нет root, поэтому не можете установить нужные вам камни)
- Вы достигли пределов производительности 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/