2011-12-22 4 views
1

私は最近、MySqlマスター/スレーブレプリケーションを使用するために、レール2.3.10アプリにmulti_db gemをインストールしました。 Rails multi_db with transaction

宝石をインストールしているので、私は私のコードでトランザクションを使用するたびに、例えば:

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

私は例外を取得:取引にmulti_db使用する方法についてNoMethodError undefined method 'assert_valid_keys' for true:TrueClass

任意のアイデア?

EDIT: 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 

すべてがスムーズに実行されます。

私のガットフィリングは、マルチ(マゾキズムの宝石に基づいています)が他の宝石のうちの1つ(多分:deadlock_retryまたはar-extensions)を使って「うまくやっていません。

+1

assert_valid_keysがHashで定義されているので、コード内で何か間違っていると思います。それはここ – phoet

+0

iv'eは私がインストールして以来、何か面白いものを見つけましたmulti_db MyModel.connection.transactionをスニペットを投稿助ける= 1 + 2 終了 は(ほとんどの場合)以下の例外を返す テストを行う可能性があります。真のための 'NoMethodError未定義の方法 'assert_valid_keys':TrueClass' 私が実行する場合: MyModel.connection.transaction({})は テスト= 1 + 2 端すべてがスムーズに実行されません。 私の腸管充填は、(マゾヒズム宝石に基づく)multi_dbが、他の宝石のうちの1つ(多分:deadlock_retryまたはar-extensions)を使用して「うまくやっていません」と伝えます。 アイデア? – Ran

+0

重複した質問からのスタックトレースは、次のとおりです。http://pastie.org/3063822 – rkb

答えて

0

multi_dbはActiveRecord 2.3.10と完全には互換性がありません。受理可能な引数とは異なる接続でtransactionメソッドを呼び出しています(ここではthe call siteを参照)。

トランザクションを使用しないで、Railsをダウングレードし、multi_dbを修正してください(してください!)、またはその宝石を完全に削除するだけです。

hereは、ActiveRecord :: ConnectionAdapters :: DatabaseStatementsのパラメータがtransactionに変更されています(2009年1月のリリース(Rails 2.3.0がリリースされる前))。