使用JRuby进行Ruby Web应用程序?这值得么?

时间:2009-05-30 01:41:11

标签: ruby performance web-applications jruby

后台:我在Ruby(而不是Rails)中编写一个“标准”(没什么特别的)Web应用程序,我需要开始考虑部署。

所以我听到很多建议使用JRuby来部署Ruby Web应用程序,无论你是否真的需要Java库。这是真的吗?是否值得使用Java实现速度?这样做我还能获得其他任何东西吗?我会遇到任何问题吗?

PS:我不太了解Java,所以“你可以用Java编写部分内容”并不是很有用。

2 个答案:

答案 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的原因:

  1. Java集成
  2. 受限制的环境(您的计算机安装的Java不是ruby而您没有root用户)
  3. 受限制的环境(你安装了ruby但没有root,因此无法安装你需要的宝石)
  4. 您达到了Ruby 1.8性能的限制,无法使用1.9
  5. 根据您的描述,您没有上述任何原因。

    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,这将在未来发生变化。

    http://kenai.com/projects/ruby-ffi/pages/Home

    http://isitjruby.com/