2011-12-22 19 views
1

我最近在我的rails 2.3.10應用程序上安裝了multi_db gem以便使用MySql主/從複製。Rails multi_db與事務

自從安裝了寶石,每次我在我的代碼中使用的交易時間,例如:

MyModel.connection.transaction do ...some code... end

我得到一個異常:NoMethodError undefined method 'assert_valid_keys' for true:TrueClass

如何與交易使用multi_db什麼想法?

編輯: iv'e發現一些有趣的事情,自從我已經安裝了multi_db

MyModel.connection.transaction do 
    test = 1+2 
end 

回報以下異常(在大多數情況下):NoMethodError undefined method 'assert_valid_keys' for true:TrueClass

,但如果我運行:

MyModel.connection.transaction({}) do 
    test = 1+2 
end 

一切運行順利。

我的腸道填充告訴我,multi_db(這是基於受虐狂寶石)不會「與我正在使用的其他寶石之一」(可能:deadlock_retry或ar-extensions)「玩得很好」。

有什麼想法?

+1

因爲assert_valid_keys是在哈希上定義的,我猜你在代碼中做錯了什麼。這可能有助於在這裏張貼片段 – phoet 2011-12-22 14:34:09

+0

iv'e發現一些有趣的事情,自從我已經安裝了multi_db MyModel.connection.transaction做 測試= 1 + 2 結束 回報以下異常(在大多數情況下): 'NoMethodError未定義的方法 'assert_valid_keys' 爲真:TrueClass' 但如果我運行: MyModel.connection.transaction({})做 測試= 1 + 2 端 一切順利。 我的腸道填充告訴我,multi_db(它是基於受虐狂寶石)不會「與我正在使用的其他寶石之一」(可能是:deadlock_retry或ar-extensions)「玩得很好」。 有什麼想法? – Ran 2011-12-23 18:23:58

+0

以下是來自重複問題的堆棧跟蹤,以供參考:http://pastie.org/3063822 – rkb 2011-12-24 19:26:25

回答

0

multi_db與ActiveRecord 2.3.10不完全兼容。它使用不同參數的連接調用transaction方法,這是可接受的(請參閱此處的the call site)。

您不得不使用事務,降級Rails,修復multi_db(請做!),或者完全刪除那個gem。

你可以看到here,其中參數transaction在ActiveRecord :: ConnectionAdapters :: DatabaseStatements中發生了變化,早在2009年1月(在Rails 2.3.0發佈之前)。