137

我正在尝试在 Rails 上试用 JRuby 和 JRuby。我很难找到有关 JRuby on Rails 和 Ruby on Rails 之间区别的信息。

我需要注意哪些差异?

4

5 回答 5

163

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

需要注意的主要特点是:

  1. JRuby 在 Java VM 上运行,它可以被编译或解释为 Java 字节码。
  2. JRuby 可以与Java 代码集成。如果您有 Java 类库 (.jar),您可以在带有 JRuby 的 Ruby 代码中引用和使用它们。在另一个方向上,您也可以从 Java 中调用 JRuby 代码。JRuby 还可以使用 JVM 和应用程序服务器功能。
  3. JRuby 通常托管在 Java 应用程序服务器中,例如 Sun 的 GlassFish 甚至 Tomcat Web 服务器。
  4. 尽管您不能将本机 Ruby gem 与 JRuby 一起使用,但大多数流行的 Ruby 库都有 JRuby 实现。

JRuby wiki 中列出了其他差异:

于 2008-09-30T04:13:59.103 回答
62

我很惊讶在这个问题的所有答案中都缺少与GIL相关的关键内容。

您应该关心的主要区别是 esp。在诸如使用 Rails 构建的 Web 应用程序中是真正的并发(“全局解释器锁”免费)。当使用 JRuby 运行两个线程(例如服务 2 个用户请求)时,它们能够在单个进程中同时运行,而在 MRI 中,有避免并行执行 Ruby 代码的 GIL(即使使用 1.9 的本机线程)。

对于应用程序开发人员来说,这是在考虑 JRuby 时首先要记住的事情,因为它确实很出色,config.threadsafe!但要求您确保您的代码(和您的 gems 代码)是“真正的”线程安全的。

于 2012-06-29T07:52:35.693 回答
7

我可能错了,但我认为你可以用普通 RoR 无法做到的方式打包 JRuby on Rails 应用程序——看看 Mingle 或类似的。可以在不掉裤子/打开 komono 的情况下进行销售。

就是说,我对 RoR 包装还不够熟悉,所以请不要执着于它 :)

于 2008-10-07T14:42:13.037 回答
4

大多数情况下它应该工作相同。在 jRoR 中,您可以访问在 RoR 中没有的东西。通常它主要是部署问题。

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

于 2008-09-30T03:53:42.427 回答
2

这里已经有一些很好的答案。

eebbesen 已经涵盖了基础知识,并且 kares(他自己!)告诉我们 JRuby 没有 GIL。

我将从更实际的角度补充一下,我已经在 Ruby on Rails 上启动了应用程序,然后出于性能原因迁移到了 JRuby。

有两个主要的性能优势:JRuby 在某些情况下(或曾经)比 Ruby 快,第二,缺少 Global Interpreter Lock kares 提到的允许我执行多线程,虽然很棘手,但解锁数量级的性能优势.

一个非常大的 Ruby on Rails 应用程序在一个小时内移植并运行,gem 等等。唯一的实际故障是 Java 的正则表达式与 Ruby 的略有不同。这对 JRuby 来说是一项不朽的成就。

于 2019-12-16T15:59:05.670 回答