문제

나를 사용하여 db 에 보석으로 Slony-내에서 복제 PostgreSQL 에서 레일 앱입니다.이 대부분이 완벽하게 작동하지만,거기에 약간의 복제를 지연하는 경우도 있습니다.하나의 경우에 포함 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 off(또는 항목에 대해 슬레이브 데이터베이스를 가리키는 마스터 db)이 잘 작동합니다.그래서 저는 무언가 이것을 좋아한다:

ActiveRecord::Base.connection_proxy.with_master do
  post=@comment.post
  count=post.comments_count
end

이 여전히 오래된 결과입니다.으로 설정:

config.cache_classes = false

그것처럼 보이는 전화 with_master 작동하지 않습니다.는 방법에 대한 조언을 결정하는 데이터베이스 멀티-db 를 사용하지 마십시오.거나,또는에 처리하는 방법으로 이러한 문제를 해결합니까?

도움이 되었습니까?

해결책

내 경험에 더 멀리에서 얻는"주류"레일을 사용하여 케이스 또는 더 플러그인 스택,적은 믿을 수 있는 고급 기능을 모두 함께 작동합니다.이와 함께 특히 사실 ActiveRecord 마법입니다.

는 경우 그것은 중요하신 의견을 최신 상태로 유지,그것을 명시적으로 합니다.의 제거 counter_cache 및 구현 after_createafter_destroy 콜백에서 당신의 코멘트는 모델의 증가 또는 감소시킬수 필드에서 당신의 게시물 모델입니다.(또는,아마도 더 많은 신뢰할 수 있고,그들을 설정하여 계산 수 있는 범위가 있습니다.) 그것은 모양이 매끄러운 하지만 그렇지 않은 실패할 가능성이 아래에서 모든 합리적인 설정의 종속성입니다.

다른 팁

가 확실하지 않는 경우는 그것의 솔루션을 제공하고 있습니다 그러나 내가 사용하는 습니까? 내 DB 복제,고 counter_cache 기능이 작동됩니다.그래서 아마도 이 문제에 보석이 필요하신 티켓에.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top