2010-08-30 50 views
1

我已經使用Ruby on Rails完成了一些項目。我將使用JRuby on Rails並將其託管在GAE上。在那種情況下,在開發JRuby應用程序時我需要知道些什麼。我讀了開發RoR應用程序後,我需要了解關於JRuby on Rails的一些信息?

  • JRuby中具有相同的語法
  • 我可以訪問Java庫
  • JRuby中沒有接觸到一些寶石/插件
  • JRuby的應用程序將需要一些時間來加載首次,所以我要保持它活着通過發送 要求每5分鐘左右
  • 我不能使用ActiveRecord,而是我必須DataMapper的

如果我對我所做的任何陳述有任何錯誤,請糾正,還有什麼我必須知道的?我是否需要從頭開始閱讀關於JRuby的內容,或者我可以照常開發Ruby應用程序?

回答

3

我每天都在使用JRuby。

真:

  • JRuby中具有相同的語法
  • JRuby中沒有接觸到一些寶石/插件
  • 我可以訪問Java庫

一些寶石/插件有jruby特定的版本,有些根本不工作。總的來說,我發現了一些問題,隨着圖書館和平臺的成熟,很多問題都消失了(JRuby已經變得好多了)。

你可以訪問Java,但總的來說你爲什麼想要?

假:

  • JRuby的應用程序將需要一些時間來加載的第一次,所以我必須要保持它活着通過發送請求,每隔5分鐘左右
  • 我不能使用ActiveRecord和相反,我必須DataMapper的

雖然我想這是可以想像的服務器設置在JVM的初始啓動/預熱成本意味着你需要ping服務器,沒有什麼內在的JRuby中,使這是真的。如果您需要保持服務器活着,您應該查看您的部署環境。與乘客分享託管服務時發生類似的情況,應用程序可能在閒置一段時間後內存不足。

此外,我們使用ActiveRecord完全沒有問題。

+0

感謝您的回答。我還有一個問題。 JRuby是Ruby 1.8.7的一個實現,它有性能問題。你能告訴我,JRuby有這樣的問題嗎? – felix 2010-08-30 11:05:22

+1

某些1.8.x性能的內容與Ruby VM中的線程和GIL有關。 JRuby沒有這些問題,因爲它依賴於JVM和JVM線程模型。一般來說,性能配置文件是完全不同的。 – 2010-08-30 11:38:17

+0

感謝byby :)。 – felix 2010-08-30 11:55:42

1

afaik,rails 3與jruby 100%兼容,所以在這條路上應該沒有問題。

就像每個新的平臺一樣,你應該用jruby玩弄自己,讓自己感覺舒服。我建議使用RVM來做到這一點。

就你的問題去:

  • JRuby是隻是一個其他運行時像MRI或Rubinus
  • 因爲JRuby是JVM中使用Java是很容易的,但你也可以使用RJB從MRI
  • 一些寶石是不兼容的,當他們使用原生的C庫,
  • JVM和應用程序容器需​​要的啓動時間和一定的時間來加載您的應用程序,但僅此而已,沒有不上的JRuby運行需要保持活力,那是錯誤的
  • 你可以使用任何你想要的,大多數的寶石被更新爲兼容使用JRuby,你以爲你
+0

感謝您的回答:) – felix 2010-08-30 11:07:11

0

@TobyHede主要涉及的問題可能有,所以我會留在這。

至於其他事情要記住,它只是一個不同的解釋器和有趣的差異會出現,將需要一些適應。

  1. 一些方法實現方式不同,如sleep 10.seconds將拋出異常(你必須sleep 10.seconds.to_i),我記得從MRI切換到JRuby的(不記得哪個方法沒有實現),當符號類越來越NoMethodError ,只是有一點輕微的變化將在那裏
  2. (上市不止一個頁面時,撬開例如)
  3. 一些寶石可以不同的方式工作,你會遇到爲你其它加工寶石掛起和異常,撬(再次)將退出,如果你按ctrl + c例如,很煩人
  4. 一切,沒有宙斯的
  5. 稍慢的加載時間
  6. 你會得到不指示上的Ruby代碼行它發生
  7. Timeout.timeout往往會無法正常工作時,其周圍的淨代碼包裹預期偶爾Java異常堆棧跟蹤和星星對齊嚴重(這主要是固定在jruby核心,但它似乎仍然是一個問題,寶石自己在純java中執行netcode)
  8. 第三方代碼中的線程安全的隱藏問題How do you choose gems for a high throughput multithreaded Rails app? - 遠離從EventMachine例如
  9. 線程將是真棒(由於nativeity和沒有gil)和纖維將吸(因爲t o在JVM中沒有協程支持,它們是普通的線程),這就是爲什麼當與MRI相比時,你通常不會獲得與賽璐珞相關的性能提升
  10. 你曾經用作爲OS中的進程的MRI Ruby運行你的rails,知道如何跟蹤他們的PID,膨脹,運行時間,殺死他們,監控他們等等,當你切換到JRuby時,這部分並不明顯,因爲在單個進程中所有內容都轉向了線程。Java世界有非常好的工具來處理這些問題,但它必須學習的東西
  11. killall -9 ruby在控制檯掛起時不會用jruby來實現(之前經常使用它),您必須使用ps -ef然後追蹤正確的進程而不會導致你的netbeans等(小問題,但煩人)
  12. 由於我的最後一點,瞭解Java和JVM將幫助你在某些情況下襬脫困境(取決於你打算做什麼這可能實際上是真的需要),部署服務器的選擇會增加或減少這種需求(例如torquebox有點臭名昭着,其他部署選項可能更簡單,請參閱http://thenerdings.blogspot.com/2012/09/pulling-plug-on-torquebox-and-jruby-for.html
  13. ...

而且,看看JRuby團隊說,有關分歧,https://github.com/jruby/jruby/wiki/DifferencesBetweenMriAndJruby

但是,是的,否則其 「剛剛同MRI紅寶石」 :)

相關問題