JRuby on Rails против Ruby on Rails, в чем разница? - PullRequest
131 голосов
/ 30 сентября 2008

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

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

Ответы [ 4 ]

155 голосов
/ 30 сентября 2008

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

Основные характеристики, на которые следует обратить внимание:

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

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

54 голосов
/ 29 июня 2012

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

Главное отличие, о котором вы должны заботиться. в веб-приложениях, например, построенных с использованием Rails, истинный параллелизм («Глобальная блокировка интерпретатора» свободна). Когда два потока работают (например, обслуживают 2 пользовательских запроса) с JRuby, они могут работать одновременно в одном процессе, тогда как в MRI есть GIL (даже с собственными потоками 1.9), который избегает параллельного выполнения кода Ruby.

Для разработчика приложений это первое, что нужно иметь в виду при рассмотрении JRuby, так как оно действительно прекрасно сочетается с config.threadsafe!, но требует от вас убедиться, что ваш код (и ваш гем-код) действительно «поточно-ориентирован» .

7 голосов
/ 07 октября 2008

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

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

3 голосов
/ 30 сентября 2008

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

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

...