我在嘗試將ActiveRecord gem升級到最新的3.1.0版本,並且看到了很多異常,我認爲這是由於我們如何處理多個數據庫。ActiveRecord 3.1.0多個數據庫
對於我們的每個數據庫,我們指定一個單獨的基類,它繼承自ActiveRecord::Base
,並在那裏調用establish_connection
。沒有跨數據庫關係。至今爲止,這對我們來說工作得很好。
升級到ActiveRecord 3.1.0我看到,它在失敗時出現ActiveRecord::ConnectionNotEstablished
異常,當遍歷關係時(即它將成功從數據庫中拉出單個實體或一組實體,但導航到相關時失敗類)。
回溯的頂線是C:/Ruby/lib/ruby/gems/1.9.1/gems/activerecord-3.1.0/lib/active_record/connection_adapters/abstract/connection_pool.rb:410:in 'retrieve_connection'
,所以我挖了一點。該方法被定義如下:
def retrieve_connection(klass) #:nodoc:
pool = retrieve_connection_pool(klass)
(pool && pool.connection) or raise ConnectionNotEstablished
end
我的簡單試驗(puts Customer.first.address
)調用retrieve_connection
3次。兩次輸入Customer
作爲參數klass
,一次輸入ActiveRecord::Base
作爲參數 - 這是因爲參數establish_connection
尚未被調用ActiveRecord::Base
。
到實際問題然後 - 是否有一種新的推薦方式來處理ActiveRecord中的多個數據庫連接?如果是這樣,那是什麼?
如果不是,會導致此問題的原因是什麼?
謝謝你,還沒有時間嘗試它,但它聽起來像一個很好的解決方案!請回來,讓我們知道,如果你找到更好的方法... –
我們遇到了同樣的問題,並希望找到更好的解決方案。不過,感謝您的幫助。至少我們現在也暢通無阻! – jasonkarns
我自己也會遇到這個問題(activerecord 3.1.3),並按照建議解決了問題。我同意更好的解決方案會更理想。 –