2010-09-14 93 views
2

我剛剛在MRI中使用JRuby和Thrift寶石後才安裝它。我遇到了一個問題,如果我需要「節儉」,我會收到消息「無法加載thrift_native擴展,默認爲純Ruby庫。」如果我然後嘗試並要求在ruby中生成的代碼節儉,我會得到這個錯誤:「NameError:未初始化常量Thrift :: Struct_Union」節儉寶石和JRuby

是節儉寶石目前不與JRuby工作?

除了使用gem之外,我還可以使用JRuby進行節儉嗎?

編輯:在挖掘我的MAC後,我發現MRI寶石和JRuby寶石是不同的,即使寶石是相同的版本(0.2.0.4)。現在這似乎是一個可怕的想法,但是如果您將MRI寶石中的.rb文件複製到JRuby寶石中,並將require 'thrift/struct_union'添加到thrift.rb中,您將不會再收到任何與Thrift寶石相關的錯誤,除非它找不到thirft_native並將使用純Ruby庫。這可以解釋,因爲thrift_native是C而不是Java。

回答

1

當您已經在使用JRuby時,我會使用Java本地節儉客戶端。對我來說,節儉是首先轉向JRuby的原因,因爲Ruby的實現相當緩慢和錯誤。

+0

你是不是說要使用gem併爲Java構建節儉?你還能從Ruby中訪問它嗎? – Aaron 2010-09-19 20:42:16

+0

這取決於你使用節點的位置,但是如果你連接的應用程序有一個很好的Java客戶端,那麼當它歸結爲節儉時,我肯定會使用Java客戶端來支持Ruby。 JRuby的優點在於使用原生Java代碼非常簡單。例如,我使用Hector連接到Cassandra,但是從Ruby應用程序調用它。 – xinit 2010-09-20 06:33:41

+0

這大致仍然是真的嗎?那就是:遠離Ruby節儉的寶石(如果您使用JRuby並運行像Puma或Phusion Passenger這樣的真正的多線程服務器)並使用Java本地節儉客戶端來代替?感謝任何評論,@ xinit或Aaron或其他人。 – likethesky 2013-10-29 21:28:48