【问题标题】:JRuby on Rails vs. Ruby on Rails, what's difference?JRuby on Rails 与 Ruby on Rails,有什么区别?
【发布时间】:2010-09-14 04:12:22
【问题描述】:

我希望试用 JRuby 和 JRuby on Rails。我很难找到有关 JRuby on Rails 和 Ruby on Rails 之间区别的信息。

我需要注意哪些差异?

【问题讨论】:

    标签: ruby-on-rails ruby jruby jrubyonrails


    【解决方案1】:

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

    需要注意的主要特点是:

    1. JRuby 在 Java 虚拟机上运行,​​可以编译或解释为 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 中列出了其他差异:

    【讨论】:

    • 谢谢,这回答了我一直在寻找的一切。 :)
    • 哦,它的运行速度比 1.9 慢了一点
    • 要查看 JRuby on Rails 的性能差异,建议使用资源充足的多核机器。缓慢的数据库查询也可能成为 JRuby 的瓶颈,并导致其执行与 Rails 上的 MRI 相似或更慢。 JRuby 还使用比 MRI 更多的前期内存。
    • 我们在使用 jruby 和 Oracle over VPN(测试运行速度非常慢)和本地(无 VPN)方面都获得了巨大的性能,只是启动 ruby​​、rails 控制台等需要 30 秒以上而不是 3 秒。
    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

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

      也就是说,我对 RoR 包装还不够熟悉,所以不要强迫我这样做 :)

      【讨论】:

      • 您在这一点上是绝对正确的,尽管您需要像 Rawr 或 Roir gem 这样的东西才能完全做到这一点(上次我使用 Mingle,它有未混淆的 Ruby 文件......) .
      【解决方案4】:

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

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

      【讨论】:

        【解决方案5】:

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

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

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

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

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

        【讨论】:

          猜你喜欢
          • 2010-11-17
          • 2011-01-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-07-29
          • 2011-10-19
          相关资源
          最近更新 更多