我想在Rails上试用JRuby和JRuby。我无法找到有关JRuby on Rails和Ruby on Rails之间区别的信息。
我需要注意哪些不同之处?
答案 0 :(得分:155)
JRuby是在JVM上运行的Ruby实现,而Matz的Ruby是C实现。
需要注意的主要功能是:
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而言,这是一个巨大的成就。