背景:我正在用 Ruby(不是 Rails)编写一个“标准”(没什么特别的)Web 应用程序,我需要开始考虑部署。
所以我听到了很多关于使用 JRuby 来部署 Ruby Web 应用程序的建议,不管你是否真的需要 Java 库。这有多真实?仅仅为了速度而使用 Java 实现是否值得?这样做我还能得到什么吗?我会遇到任何问题吗?
PS:我不太了解Java,所以“你可以用Java写一部分”不是很有帮助。
背景:我正在用 Ruby(不是 Rails)编写一个“标准”(没什么特别的)Web 应用程序,我需要开始考虑部署。
所以我听到了很多关于使用 JRuby 来部署 Ruby Web 应用程序的建议,不管你是否真的需要 Java 库。这有多真实?仅仅为了速度而使用 Java 实现是否值得?这样做我还能得到什么吗?我会遇到任何问题吗?
PS:我不太了解Java,所以“你可以用Java写一部分”不是很有帮助。
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 jars 等)。如果您使用的应用程序将长期存在,并且您想要更好的运行时支持,那么 JRuby 可能是一个不错的选择。否则,您可以放心地等到需要这些东西才能真正采取行动(很可能会顺利进行)。
我每天都使用并喜欢 JRuby,但我建议你使用 MRI(又名 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 gems 两者都可以使用。
如上所述,具有 C 扩展名的 ruby gem 不能安装在 JRuby 下。希望如果 ruby C 扩展使用 FFI,这将在未来改变。