JRuby on Rails与Ruby on Rails有什么区别?
我正在尝试使用JRuby和JRuby on Rails。 我无法find关于JRuby on Rails和Ruby on Rails有什么区别的信息。
我需要留意哪些差异?
JRuby是在JVM上运行的ruby实现,而Matz的ruby是C实现。
主要特点是:
- Jruby运行在Java VM上,可以编译或解释为Java字节码。
- JRuby可以与Java代码集成。 如果您有java类库(.jar),那么可以在JRuby中从Ruby代码中引用和使用它们。 另一方面,您也可以从Java内部调用Jruby代码。 JRuby也可以使用JVM和应用程序服务器function。
- JRuby通常驻留在Java应用程序服务器(如Sun的glassfish或甚至Tomcat Web服务器)内。
- 尽pipe您不能在JRuby上使用本机ruby,但大多数stream行的ruby库都有jruby实现。
在jruby wiki上还有其他的区别:
- JRuby和Ruby之间的区别(MRI)
- JRuby在轨道上
我很惊讶,这个问题的所有答案都缺less一个至关重要的东西,与GIL有关。
你应该关心的主要区别是esp。 在诸如使用Rails构build的Web应用程序中是真正的并发性 (“Global Interpreter Lock”免费)。 当使用JRuby运行两个线程(例如,提供两个用户请求)时,它们能够在单个进程中同时运行,而在MRI中则有GIL(即使是1.9的本地线程),避免了并行执行Ruby代码。
对于应用程序开发人员来说,在考虑JRuby时,首先要记住的是,它确实与config.threadsafe!
闪耀config.threadsafe!
但要求你确保你的代码(和你的gem代码)是“真正”线程安全的。
我可能是错的,但是我认为你可以用一个你不能用普通RoR做的方式打包一个JRuby on Rails应用程序 – 看一下Mingle或类似的东西。 可以销售,而不会掉下你的裤子/打开k </s>。
这就是说,我不熟悉RoR包装,所以不要抱着我:)
大多数情况下它应该是一样的。 在jRoR中,您可以访问RoR中不会有的东西。 通常它主要是一个部署问题。
但是,如果您的RoR应用程序使用没有在JVM上运行的等效库的本机库,那可能会很痛苦。 然而,大多数库有一个非本地版本可用(至less是我遇到的stream行的版本)。