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