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

问题描述 投票:0回答:6

我想尝试一下 JRuby 和 JRuby on Rails。我无法找到有关 JRuby on Rails 和 Ruby on Rails 之间差异的信息。

我需要注意哪些差异?

ruby-on-rails ruby jruby jrubyonrails
6个回答
164
投票

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 中列出了其他差异:


63
投票

我很惊讶这个问题的所有答案都遗漏了与 GIL 相关的关键内容。

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

对于应用程序开发人员来说,这是在考虑 JRuby 时要记住的第一件事,因为它确实非常出色

config.threadsafe!
,但要求您确保您的代码(和您的 gems 代码)“真正”线程安全。


7
投票

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

也就是说,我对 RoR 封装还不够熟悉,所以不要让我坚持:)


4
投票

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

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


2
投票

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

eebbesen 已经介绍了基础知识,并且 kares(他本人!)告诉我们 JRuby 没有 GIL。

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

有两个主要的性能优势:在某些情况下,JRuby(或曾经)比 Ruby 更快,第二,缺少卡雷斯提到的全局解释器锁,使我能够进行多线程处理,这虽然很棘手,但解锁了数量级的性能好处。

一个非常大的 Ruby on Rails 应用程序在一个小时内移植并运行,一切顺利。唯一实际的问题是 Java 的正则表达式与 Ruby 的略有不同。对于 JRuby 来说,这是一项巨大的成就。


0
投票

JRuby 与常规 Ruby 编程语言之间的主要区别在于,JRuby 使用 Java 虚拟机 (JVM) 而不是传统的 Ruby 虚拟机。这使得 JRuby 可以在任何支持 Java 运行时环境的平台上运行。这可以包括 Windows、Mac、Linux 和其他支持 Java 的平台。

JRuby 具有一些独特的优点,因为它与所有现有的 Java 库和其他技术无缝集成,这在某些情况下(例如线程)可能是一个很大的优势。在某些情况下它也更快。

但是一切都取决于您的项目,如果您有 JAVA 后端/大量线程需求,那么 Jruby 很好,否则就选择 Ruby。 (注:Ruby比JRUBY有更好的支持)

© www.soinside.com 2019 - 2024. All rights reserved.