繁体   English   中英

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

[英]JRuby on Rails vs. Ruby on Rails, what's difference?

我想尝试 JRuby 和 JRuby on Rails。 我无法找到有关 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 和应用程序服务器功能。
  3. JRuby 通常托管在 Java 应用程序服务器中,例如 Sun 的 GlassFish 甚至 Tomcat Web 服务器。
  4. 尽管您不能在 JRuby 中使用本机 Ruby gem,但是大多数流行的 Ruby 库都有 JRuby 实现。

JRuby wiki 中列出了其他差异:

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

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

对于应用程序开发人员来说,这是在考虑 JRuby 时首先要记住的事情,因为config.threadsafe!真的很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 应用程序在一个小时内移植并运行,gems 等等。 唯一的实际故障是 Java 的正则表达式与 Ruby 的略有不同。 这对 JRuby 来说是一个巨大的成就。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM