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


135

我正在尝试尝试JRuby和JRuby on Rails。我很难找到有关JRuby on Rails和Ruby on Rails之间的区别的信息。

我需要注意的区别是什么?

Answers:


160

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


谢谢您,这个回答几乎满足了我的所有需求。:)
epochwolf

4
哦,它的运行速度比1.9慢
rogerdpack 2010年

1
要查看JRuby on Rails的性能差异,建议使用具有足够资源的多核计算机。慢速的数据库查询也会造成JRuby的瓶颈,并导致其性能与Rails上的MRI相似或慢。与MRI相比,JRuby还使用了更多的前期内存。
Joseph Ravenwolfe 2012年

我们有过VPN使用JRuby和Oracle(测试运行难以置信的慢,),也都在本地大规模的性能(无VPN)刚刚起步红宝石,导轨控制台等需要30秒+而不是3
迈克尔·达兰特

57

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

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

对于应用程序开发人员来说,这是考虑JRuby时要牢记的第一件事,因为它确实发光,config.threadsafe!但要求您确保代码(和gems代码)是“真正的”线程安全的。


7

我可能是错的,但是我认为您可以使用普通RoR无法做到的方式打包JRuby on Rails应用-查看Mingle或类似的东西。使出售时无需掉裤子或打开和服。

就是说,我对RoR包装还不太熟悉,所以不要拘泥于:)


1
您绝对是正确的,尽管您需要像Rawr或Roir宝石之类的东西才能完全做到这一点(上一次我使用Mingle,它具有未混淆的Ruby文件...)。
Marnen Laibow-Koser

3

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

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


0

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

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

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

有两个主要的性能优势:在某些情况下,JRuby比(或过去)快于Ruby,另外两个,缺少Global Interpreter Lock的优点使我可以进行多线程处理,尽管棘手,但解锁了数量级的性能优势。

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.