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

时间:2008-09-30 03:00:18

标签: ruby-on-rails ruby jruby jrubyonrails

我想在Rails上试用JRuby和JRuby。我无法找到有关JRuby on Rails和Ruby on Rails之间区别的信息。

我需要注意哪些不同之处?

5 个答案:

答案 0 :(得分:155)

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

需要注意的主要功能是:

  1. Jruby在Java VM上运行,它可以编译或解释为Java字节代码。
  2. JRuby可以与Java代码集成。如果你有Java类库(.jar),你可以在Ruby代码中使用JRuby引用和使用它们。在另一个方向,您还可以从Java中调用JRuby代码。 JRuby还可以使用JVM和应用程序服务器功能。
  3. JRuby通常托管在Java应用程序服务器中,例如Sun的glassfish甚至是Tomcat Web服务器。
  4. 虽然你不能在JRuby中使用原生的Ruby gems,但大多数流行的Ruby库都有JRuby实现。
  5. JRuby wiki上列出了其他差异:

答案 1 :(得分:54)

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

你应该关心的主要区别是什么。在Web应用程序中,例如使用Rails构建的应用程序真正并发(“Global Interpreter Lock”免费)。当使用JRuby运行两个线程(例如,提供2个用户请求)时,它们能够在单个进程内并发运行,而在MRI中,GIL(即使使用1.9的本机线程)也可以避免并行执行Ruby代码。

对于应用程序开发人员来说,这是考虑JRuby时要记住的第一件事,因为它真的很config.threadsafe!,但要求你确保你的代码(和你的宝石代码)是“真正的”线程-safe。

答案 2 :(得分:7)

我可能错了,但我认为你可以用一种你不能用正常RoR做的方式打包JRuby on Rails应用程序 - 看看Mingle或类似的东西。可以在不丢弃裤子/打开komono的情况下进行销售。

那就是说,我对RoR包装不够熟悉,所以不要抱我这样做:)

答案 3 :(得分:3)

大多数情况应该是一样的。在jRoR中,您可以访问RoR中不具备的内容。通常它主要是部署问题。

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

答案 4 :(得分:0)

这里已经有一些不错的答案。

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

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

有两个主要的性能优势:在某些情况下,JRuby比(或曾经)快于Ruby,另外两个,由于缺少Global Interpreter Lock的支持,我可以进行多线程处理,而棘手的是,解锁了许多命令。数量级的性能优势。

一个非常大的Ruby on Rails应用程序移植了一个小时,并运行了gems和所有功能。唯一实际的故障是Java的正则表达式与Ruby的正则表达式略有不同。对于JRuby而言,这是一个巨大的成就。