2009-02-09 46 views
1

我有一個rails應用程序和一個單獨的druby進程。這個過程給了我一些方法,並且在每個druby的方法的第一行有一個對ActiveRecord :: Base.establish_connection的調用,其中db_name依賴於由rails應用程序設置的參數。 有時候這個過程會得到錯誤的數據庫名稱,我認爲這可能是一個併發問題。它會是嗎?任何想法如何使它線程安全?Druby和ActiveRecord線程問題

感謝您的幫助! Roberto

回答

0

是的,這是一個併發問題。

要修復它,你將不得不稍微改變你的架構,但我沒有足夠的信息。

  • 在後端運行的代碼是否與在rails應用程序中運行的代碼相同?
  • 你的不同數據庫使用相同的模型嗎?
  • 你有多少個不同的數據庫?這個數字會增長嗎?

基本上,如果你有一個小的和固定數量的數據庫,最簡單的就是使用不同的ruby進程。

如果你有不同的型號不同的數據庫,你可以設想使用不同的基類:

AppA < ActiveRecord::Base 
Model1 < AppA 
Model2 < AppA 

AppB < ActiveRecord::Base 
Model3 < AppB 

然後就可以調用

AppA.establish_connection(...) 
AppB.establish_connection(...) 

到不同的數據庫。

+0

你也可以添加一個全局互斥體來序列化你的drb請求,但是你會限制速度。 – zimbatm 2009-05-15 10:47:54