JRuby on Rails против Ruby on Rails, в чем разница?

133

Я хочу попробовать JRuby и JRuby на Rails. У меня возникли проблемы с поиском информации о том, какая разница между JRuby on Rails и Ruby on Rails.

Какие различия мне нужно искать?

Теги:
jruby
jrubyonrails

4 ответа

155
Лучший ответ

JRuby - это реализация ruby, которая работает на JVM, тогда как Rubz Matz - реализация C.

Основные функции:

  • Jruby работает на виртуальной машине Java, и он либо скомпилирован, либо интерпретирован с помощью байт-кода Java.
  • JRuby может интегрироваться с Java-кодом. Если у вас есть библиотеки классов java (.jar), вы можете ссылаться на них и использовать их из кода ruby ​​с помощью JRuby. В другом направлении вы также можете вызвать код Jruby из Java. JRuby также может использовать возможности JVM и сервера приложений.
  • JRuby обычно размещается на серверах приложений Java, таких как Sun glassfish или даже веб-сервер Tomcat.
  • Хотя вы не можете использовать собственные рубиновые драгоценности с JRuby, для большинства популярных рубиновых библиотек есть jruby-реализации.

Существуют и другие отличия, которые перечислены в wiki jruby:

  • 0
    Спасибо, что отвечает практически на все, что я искал. :)
  • 4
    о, и он работает немного медленнее, чем 1,9
Показать ещё 3 комментария
46

Я удивлен, что во всех ответах на этот вопрос отсутствует ключевая вещь, связанная с GIL.

Основное различие, которое вы должны заботиться о esp. в веб-приложениях, таких как построенные с помощью Rails, true concurrency ( "Global Interpreter Lock" бесплатно). Когда два потока работают (например, обслуживают 2 пользовательских запроса) с JRuby, они могут работать одновременно в рамках одного процесса, тогда как в MRI есть GIL (даже с 1,9 родными потоками), который позволяет избежать параллельного выполнения кода Ruby.

Для разработчиков приложений это первое, что нужно учитывать при рассмотрении JRuby, поскольку оно действительно сияет с помощью config.threadsafe!, но требует, чтобы ваш код (и ваш код драгоценных камней) был "действительно" потокобезопасным.

7

Возможно, я ошибаюсь, но я думаю, что вы можете упаковать приложение JRuby on Rails так, как вы не можете сделать с обычным RoR - посмотрите на Mingle или подобное. Позволяет продавать, не отбрасывая штаны/открывая комоно.

Тем не менее, я недостаточно знаком с упаковкой RoR, поэтому не держу меня в этом:)

  • 1
    Вы абсолютно правы в этом, хотя вам понадобится что-то вроде драгоценного камня Rawr или Roir, чтобы сделать это полностью (в прошлый раз, когда я использовал Mingle, у него были не скрытые файлы Ruby ...).
3

в основном он должен работать одинаково. в jRoR вы можете получить доступ к материалам, которые у вас не были бы в RoR. Обычно это в основном проблема развертывания.

Однако, если ваше приложение RoR использует собственные библиотеки, которые не имеют эквивалента, который работает на JVM, это может быть болью. Однако большинство libs имеют не родную версию (по крайней мере, популярные из них, с которыми я столкнулся).

Ещё вопросы

Сообщество Overcoder
Наверх
Меню