背景:我在Ruby(而不是Rails)中编写一个"标准"(没什么特别的)Web应用程序,我需要开始考虑部署.
因此,无论您是否真的需要Java库,我都会听到很多建议使用JRuby来部署Ruby Web应用程序.这是真的吗?是否值得使用Java实现速度?这样做我还能获得其他任何东西吗?我会遇到任何问题吗?
PS:我不太了解Java,所以"你可以用Java编写部分内容"并不是很有帮助.
JRuby是最完整的ruby实现之一(还有很多其他的实现,如IronRuby,Maglev,Rubinius,XRuby,YARV,MacRuby).因此,它是非常全面的,除非您使用使用本机C代码的宝石,否则您很可能在兼容性方面很好.
JRuby比实际的C实现快一点,但它支持实际的线程,而官方实现正在努力获得它(它仍然使用绿色线程).使用来自JRuby的Java线程非常简单,即使它需要您将代码与Java相结合(使用一点DI,这种耦合只会发生一次).
另一个好处:运行时工具.Java作为一种平台而不是语言,有许多运行时工具可以帮助您诊断问题并检查应用程序的状态(分析器,JConsole等).
Twitter工程师还提到Ruby VM有点难以成为长期存在的进程的环境,而JVM非常擅长,因为它在过去的十年中已经针对它进行了优化.
Ruby最近也有一点安全问题,这不会影响JRuby的实现.
另一方面,您的项目需要更多工件(JVM,JRuby jar等).如果您使用的应用程序将保持很长时间,并且您希望获得更好的运行时支持,那么JRuby可能是一个很好的方法.否则,您可以安全地等待,直到您需要这些东西来实际移动(它可能会顺利进行).
我每天都使用和喜欢JRuby,但我建议你使用MRI(又名C-Ruby),除非你真的需要JRuby.
使用JRuby的原因:
Java集成
受限制的环境(您的计算机安装的Java不是ruby而您没有root)
受限制的环境(你安装了ruby但没有root,所以无法安装你需要的宝石)
你达到了Ruby 1.8性能的极限,不能使用1.9
根据您的描述,您没有上述任何原因.
与C-Ruby 1.8相比,C-Ruby 1.9具有显着的性能改进.我还没有阅读(或自己找出)C-Ruby 1.9与JRuby 1.8或JRuby 1.9的比较.无论如何,你还没有性能问题,所以不用担心.
好消息是,您可以从任何一个开始,如果需要,可以稍后转换.这一切都是Ruby,Webrick和Mongrel宝石同时兼顾.
如上所述,具有C扩展名的ruby gem无法在JRuby下安装.希望如果ruby C扩展使用FFI,这将在未来发生变化.
http://kenai.com/projects/ruby-ffi/pages/Home
http://isitjruby.com/