Rails アプリの PostgreSQL で Slony-I レプリケーションを使用して multi-db gem を使用しています。これはほとんど完全に機能しますが、場合によってはレプリケーションの遅延が少し発生します。ケースの 1 つは、ActiveRecord の counter_cache に関係します。
わかりやすくするために、次の 2 つのモデルを想定します。
class Post < ActiveRecord::Base
has_many :comments
...
end
class Comment < ActiveRecord::Base
belongs_to :post, :counter_cache => true, :touch => true
...
end
コメントの作成後、rjs が呼び出され、コメント数が次のように更新されます。
@comment.post.comments_count
multi-db をオフ (またはマスター データベースを指すスレーブ データベースのエントリ) にすると、これは正常に機能します。だから、私はこのようなことを試しました:
ActiveRecord::Base.connection_proxy.with_master do
post=@comment.post
count=post.comments_count
end
これはまだ古い結果をもたらします。設定と同様に:
config.cache_classes = false
への呼び出しが機能しwith_master
ていないようです。multi-db が使用しているデータベースを特定する方法について何かアドバイスはありますか? または、代わりに、そのような問題に対処する方法について?