2009-05-30 63 views
14

背景:我在Ruby(不是Rails)中編寫'標準'(沒有特別的)web應用程序,我需要開始考慮部署。使用JRuby for Ruby Web應用程序?這值得麼?

所以我一直聽到很多關於使用JRuby來部署Ruby Web應用程序的建議,無論您是否真的需要Java庫。這是多麼真實?是否值得使用Java實現來提高速度?我這樣做會得到什麼嗎?我會遇到任何問題嗎? PS:我不太瞭解Java,所以「你可以用Java編寫它的一部分」並不是很有幫助。

回答

21

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

優秀的答案,這正是我所需要知道的。謝謝。 :) – 2009-05-30 02:17:31

+3

Twitter開發者對Ruby的看法有點似是而非。如果問題出在他們所說的話,那麼明智的做法就是使用JRuby。他們沒有將他們的Ruby代碼移到Java中 - 他們在Scala中重寫了它。聽起來他們的問題更像是他們的代碼而不是MRI。 – Chuck 2009-05-30 06:39:03

6

我每天都會使用並喜歡JRuby,但是我建議您使用MRI(a.k.a. C-Ruby),除非您確實需要JRuby。

理由使用JRuby:

  1. Java集成
  2. 受限環境(你的機器已經沒有紅寶石安裝了Java,你沒有root)
  3. 受限環境(你已經安裝了Ruby,但沒有root所以不能安裝你所需要的寶石)
  4. 你達到紅寶石1.8性能的極限,不能使用1.9

從你所描述的,你沒有任何上述的原因。

C-Ruby 1。9與C-Ruby 1.8相比有顯着的性能提升。我還沒有閱讀(或自己找出)C-Ruby 1.9如何與JRuby 1.8或JRuby 1.9進行比較。無論如何,你沒有性能問題(還沒有),所以不用擔心。

好消息是,你可以從任一開始,如果需要的話可以稍後轉換。這些都是Ruby,Webrick和Mongrel寶石都可以同時使用。

如上所述,具有C擴展名的紅寶石不能在JRuby下安裝。如果ruby C擴展使用FFI,希望這將在未來發生變化。

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

http://isitjruby.com/

相關問題