Frage

Ich habe eine Kehrmaschine bekam, die ein paar Action-Caches ablaufen soll wird. Auch wenn der Debugger unmittelbar vor dem Aufruf von expire_action stoppt, ist es nicht abläuft tatsächlich die Aktion. Jede Idee, was könnte da los?

Hier sind die relevante Kehrmaschine und Controller.

# company_sweeper.rb (in 'Modelle' Verzeichnis)

class CompanySweeper < ActionController::Caching::Sweeper
  observe Company

  def after_save(company)
    expire_cache(company) if company.final_save && company.valid?
  end

  def expire_cache(company)

    debugger                                              <= #debugger stops here!
                                                             right before the call
                                                             I'm trying to make.

    expire_action :controller => 'reports', 
                  :action => 'full_report'
  end
end

# reports_controller.rb

class ReportsController < ApplicationController
  layout false
  caches_action :full_report, :supplier_list, :service_categories
  cache_sweeper :company_sweeper

  def full_report
      #do stuff...
  end
end

So wie ich weiß, dass es nicht abgelaufen ist, dass der vollständige Bericht alte Daten zurückgibt, und fast sofort reagiert. Seltsam, nicht wahr?

War es hilfreich?

Lösung

Haben Sie eine cache_sweeper Erklärung in Ihrem CompaniesController haben auch? Die Kehrmaschine muss in der Steuerung enthalten sein, dass führen Aktionen auf dem Modell in Frage Lebenszyklus. Es sei denn, Sie Dinge mit Firmen Instanzen in ReportsController tun, die cache_sweeper Linie gehört nicht da.

Aktion Caching enthält einen impliziten Hostnamen. Wenn die beiden Treffer in auf verschiedenen Host-Namen kommen, Caching erfolgt unter ein und Ablauf unter einer anderen.

Andere Tipps

Ich glaube nicht, es gibt genug Details hier wirklich Ihre Frage zu beantworten, aber hier sind einige Fragen:

Die Kehrmaschine sollte unabhängig von der full_report Aktion ausgelöst, so dass, wenn Sie eine Änderung an einem Unternehmen zu machen, sollten Sie den Debugger Feuer sehen (was es sieht aus wie geschieht richtig). Sie brauchen dann nicht die full_report Aktion, so an dieser Stelle führen Sie die Cache-Datei entfernt wurde, überprüfen konnten. Es könnte zu Schritt durch expire_action im Debugger nützlich sein, um zu sehen, ob Schienen den Ablauf aus einem anderen Grunde zu überspringen.


EDIT: oh Sie wissen, was, ich war gerade in dieses diggging, und es sieht aus wie expire_action erwartet wird, in einem Controller Kontext laufen (ich war die Edelstein Quelle in Action lesen). Er geht davon aus ‚Selbst‘ ein Controller ist, so Ihre Weitergabe in der Option. Controller ignoriert wird

Weitere Beispiele geben eine bestimmte Zeichenfolge anstelle von Optionen (z expire_action '/reports/full_report') Ich mag das nicht persönlich --- es ist nicht der Router --- aber es scheint, wie es funktionieren würde.

Vielleicht sollten Sie zu dieser Methode wechseln, sicherzustellen, dass es funktioniert, und dann im Debugger sehen, ob Sie den Zugriff auf url_for hat. es könnte so einfach wie expire_action url_for(:controller => 'reports', :action => 'full_report') sein

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