私はActiveRecord gemを最新の3.1.0リリースにアップグレードしようとしていますが、例外が多く発生しているのを見て、私は複数のデータベースをどのように処理するのかと考えています。ActiveRecord 3.1.0複数のデータベース
それぞれのデータベースについて、ActiveRecord::Base
から継承する別の基本クラスを指定し、そこでestablish_connection
を呼び出します。データベース間の関係はありません。これまで私たちのためにうまくいきました。
ActiveRecord 3.1.0にアップグレードしたのですが、ActiveRecord::ConnectionNotEstablished
例外が発生しました。関係をトラバースするときに例外が発生します(つまり、1つのエンティティまたはDBのセットが正常に取得されますが、関連するクラス)。
バックトレースの先頭行は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
パラメータとして2回、パラメータとしてActiveRecord::Base
を1回実行します。これは、失敗するとestablish_connection
が呼び出されていないため、ActiveRecord::Base
となります。
実際の質問には、ActiveRecordで複数のデータベース接続を処理する新しい方法がありますか?もしそうなら、それは何ですか?
もしそうでない場合は、この問題の原因は何ですか?
ありがとうございました。まだ試してみる時間はありませんでしたが、良い解決策のようです。あなたがもっと良い方法を見つけたら、私たちに知らせてください。 –
私たちは同じ問題を抱えており、もっと良い解決策を探しています。しかし、助けてくれてありがとう。少なくとも今でもブロックされていません! – jasonkarns
この問題(activerecord 3.1.3)に直面して、問題を解決しました。私はより良い解決策がより理想的であることに同意します。 –