我正在尝试在 Rails 上试用 JRuby 和 JRuby。我很难找到有关 JRuby on Rails 和 Ruby on Rails 之间区别的信息。
我需要注意哪些差异?
我正在尝试在 Rails 上试用 JRuby 和 JRuby。我很难找到有关 JRuby on Rails 和 Ruby on Rails 之间区别的信息。
我需要注意哪些差异?
JRuby 是在 JVM 上运行的 Ruby 实现,而 Matz 的 Ruby 是 C 实现。
需要注意的主要特点是:
JRuby wiki 中列出了其他差异:
我很惊讶在这个问题的所有答案中都缺少与GIL相关的关键内容。
您应该关心的主要区别是 esp。在诸如使用 Rails 构建的 Web 应用程序中是真正的并发(“全局解释器锁”免费)。当使用 JRuby 运行两个线程(例如服务 2 个用户请求)时,它们能够在单个进程中同时运行,而在 MRI 中,有避免并行执行 Ruby 代码的 GIL(即使使用 1.9 的本机线程)。
对于应用程序开发人员来说,这是在考虑 JRuby 时首先要记住的事情,因为它确实很出色,config.threadsafe!
但要求您确保您的代码(和您的 gems 代码)是“真正的”线程安全的。
我可能错了,但我认为你可以用普通 RoR 无法做到的方式打包 JRuby on Rails 应用程序——看看 Mingle 或类似的。可以在不掉裤子/打开 komono 的情况下进行销售。
就是说,我对 RoR 包装还不够熟悉,所以请不要执着于它 :)
大多数情况下它应该工作相同。在 jRoR 中,您可以访问在 RoR 中没有的东西。通常它主要是部署问题。
但是,如果您的 RoR 应用程序使用的本机库没有在 JVM 上运行的等效库,那可能会很痛苦。然而,大多数库都有可用的非本机版本(至少是我遇到的流行版本)。
这里已经有一些很好的答案。
eebbesen 已经涵盖了基础知识,并且 kares(他自己!)告诉我们 JRuby 没有 GIL。
我将从更实际的角度补充一下,我已经在 Ruby on Rails 上启动了应用程序,然后出于性能原因迁移到了 JRuby。
有两个主要的性能优势:JRuby 在某些情况下(或曾经)比 Ruby 快,第二,缺少 Global Interpreter Lock kares 提到的允许我执行多线程,虽然很棘手,但解锁数量级的性能优势.
一个非常大的 Ruby on Rails 应用程序在一个小时内移植并运行,gem 等等。唯一的实际故障是 Java 的正则表达式与 Ruby 的略有不同。这对 JRuby 来说是一项不朽的成就。