Frage

Ich bin mit dem Multi-db Juwel mit Slony-I-Replikation auf PostgreSQL in einer Rails-Anwendung. Das funktioniert meist perfekt, aber es ist ein bisschen von einer Replikationsverzögerung in bestimmten Fällen. Einer der Fälle beinhaltet eine Active counter_cache.

Aus Gründen der Klarheit übernehmen die beiden folgenden Modelle:

class Post < ActiveRecord::Base
  has_many :comments
  ...
end

class Comment < ActiveRecord::Base
  belongs_to :post, :counter_cache => true, :touch => true
  ...
end

Nach der Erstellung eines Kommentars, rjs zu aktualisieren Kommentare aufgerufen zählen mit:

@comment.post.comments_count

Mit dem Multi-db ausgeschaltet (oder der Eintrag für die Slave-Datenbank die der Master db zeigt), das funktioniert gut. Also habe ich versucht, so etwas wie folgt aus:

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

Das gibt noch ein schales Ergebnis. Wie funktioniert Einstellung:

config.cache_classes = false

Es sieht aus wie der Aufruf von with_master funktioniert nicht. Alle Ratschläge, wie zu bestimmen, welche Datenbank Multi-db verwendet? Oder alternativ über den Umgang mit solchen Fragen beschäftigen?

War es hilfreich?

Lösung

Nach meiner Erfahrung, die weiter weg Sie von „Mainstream“ Rails Fälle verwenden oder die weiteren Plugins, die Sie stapeln, desto weniger können Sie auf erweiterte Funktionen für alle Arbeiten zusammen zählen. Dies gilt insbesondere mit Active Magie.

Wenn es wichtig ist, dass Ihr Kommentar Zahl auf dem Laufenden bleiben, tun Sie es ausdrücklich. Befreien Sie sich von der counter_cache und implementieren after_create und after_destroy Rückrufen in Ihrem Kommentar Modell, dass zum Erhöhen und Verringern des Zählerfeldes in Ihrem Beitrag Modell. (Oder vielleicht zuverlässige, setzten sie auf die neu berechnete Zählung für diesen Bereich.) Es ist weniger glatt aussieht, aber es ist nicht wahrscheinlich unter jedem vernünftigen Satz von Abhängigkeiten zum Scheitern verurteilt.

Andere Tipps

Nicht sicher, ob es die Lösung, die Sie nach sind, aber ich benutze Masochismus für meine DB-Replikation und die counter_cache Funktionalität funktioniert gut. so vielleicht das Problem in der Perle ist, und Sie müssen ein Ticket einzureichen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top