JRuby on Rails与Ruby on Rails有什么区别?

我正在尝试使用JRuby和JRuby on Rails。 我无法find关于JRuby on Rails和Ruby on Rails有什么区别的信息。

我需要留意哪些差异?

JRuby是在JVM上运行的ruby实现,而Matz的ruby是C实现。

主要特点是:

  1. Jruby运行在Java VM上,可以编译或解释为Java字节码。
  2. JRuby可以与Java代码集成。 如果您有java类库(.jar),那么可以在JRuby中从Ruby代码中引用和使用它们。 另一方面,您也可以从Java内部调用Jruby代码。 JRuby也可以使用JVM和应用程序服务器function。
  3. JRuby通常驻留在Java应用程序服务器(如Sun的glassfish或甚至Tomcat Web服务器)内。
  4. 尽pipe您不能在JRuby上使用本机ruby,但大多数stream行的ruby库都有jruby实现。

在jruby wiki上还有其他的区别:

  • JRuby和Ruby之间的区别(MRI)
  • JRuby在轨道上

我很惊讶,这个问题的所有答案都缺less一个至关重要的东西,与GIL有关。

你应该关心的主要区别是esp。 在诸如使用Rails构build的Web应用程序中是真正的并发性 (“Global Interpreter Lock”免费)。 当使用JRuby运行两个线程(例如,提供两个用户请求)时,它们能够在单个进程中同时运行,而在MRI中则有GIL(即使是1.9的本地线程),避免了并行执行Ruby代码。

对于应用程序开发人员来说,在考虑JRuby时,首先要记住的是,它确实与config.threadsafe!闪耀config.threadsafe! 但要求你确保你的代码(和你的gem代码)是“真正”线程安全的。

我可能是错的,但是我认为你可以用一个你不能用普通RoR做的方式打包一个JRuby on Rails应用程序 – 看一下Mingle或类似的东西。 可以销售,而不会掉下你的裤子/打开k </s>。

这就是说,我不熟悉RoR包装,所以不要抱着我:)

大多数情况下它应该是一样的。 在jRoR中,您可以访问RoR中不会有的东西。 通常它主要是一个部署问题。

但是,如果您的RoR应用程序使用没有在JVM上运行的等效库的本机库,那可能会很痛苦。 然而,大多数库有一个非本地版本可用(至less是我遇到的stream行的版本)。