JRuby on Rails против Ruby on Rails, какая разница?

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

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

Ответ 1

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

Ключевые особенности, на которые следует обратить внимание:

  1. JRuby работает на Java VM и компилируется или интерпретируется как байт-код Java.
  2. JRuby может интегрироваться с кодом Java. Если у вас есть библиотеки классов Java (.jar), вы можете ссылаться на них и использовать их из кода Ruby с помощью JRuby. В другом направлении вы также можете вызывать код JRuby из Java. JRuby также может использовать возможности JVM и сервера приложений.
  3. JRuby обычно размещается на серверах приложений Java, таких как Sun GlassFish или даже на веб-сервере Tomcat.
  4. Хотя вы не можете использовать нативные гемы Ruby с JRuby, существуют реализации JRuby для большинства популярных библиотек Ruby.

Есть другие отличия, которые перечислены на вики JRuby:

Ответ 2

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

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

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

Ответ 3

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

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

Ответ 4

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

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