Я использую gem multi-db с репликацией Slony-I на PostgreSQL в приложении Rails. Это в основном работает отлично, но в некоторых случаях наблюдается некоторая задержка репликации. Один из случаев связан с ActiveRecord counter_cache.
Для ясности предположим следующие две модели:
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 (или записью ведомой базы данных, указывающей на master db), это работает нормально. Итак, я попробовал что-то вроде этого:
ActiveRecord::Base.connection_proxy.with_master do
post=@comment.post
count=post.comments_count
end
Это все еще дает устаревший результат. Как это делает установка:
config.cache_classes = false
Похоже, что звонок на with_master
не работает. Любой совет, как определить, какую базу данных multi-db использует? Или, альтернативно, о том, как бороться с такими проблемами?