Frage

Ich habe einen Controller, in dem ich die Show-Aktion zwischengespeichert habe. Die Show-Aktion hat eine Anzahl von vor Filtern für die Sicherheit, die ausführen und umleiten sollen, wenn der Benutzer nicht angemeldet ist, kein Mitglied der aktuellen Gruppe usw. Diese vor Filter funktionieren perfekt, wenn ich nicht eingeschaltet habe, aber Wenn ich den Schalter umdrehe, um die Zwischenspeicherung auf der Vorher-Filter nicht mehr ausgeführt (meine Debugger-Anrufe sind nicht getroffen).

Es war schon immer mein Verständnis, dass vor Filtern für zwischengespeicherte Aktionen aufgerufen werden, wobei dies der Hauptunterschied zwischen Seiten-Caching- und Action-Caching ist. Dies wird von der Rails Caching-Tutorial-Sektion auf Action-Caching , die liest:

Action Caching funktioniert wie Seiten-Caching, mit Ausnahme der Tatsache, dass die eingehende Webanforderung vom Webserver an den Rails-Stack- und Aktionspaket ausgeht, so dass, davor Filter ausgeführt werden können, bevor der Cache serviert wird. Dadurch kann eine Authentifizierung und andere Einschränkungen ausgeführt werden, während das Ergebnis der Ausgabe von einer zwischengespeicherten Kopie dient.

Warum werden meine vor Filter nicht angerufen?

ein bisschen um mein Setup: Rails 3.1 mithilfe der Ausarbeitung für die Authentifizierung. Ich benutze den Dalli-Juwel für einen Memcached-Shop.

Hier ist ein Teil Code, der meinen Code zusammenfasst (viel Cruft-Ausschnitt): generasacodicetagpre.

Hat jemand dieses Verhalten vorher gesehen? Habe ich ein Loch in meinem Verständnis, wie vor Filtern und Action Caching arbeiten soll? Oder vielleicht habe ich ein seltsames Voodo mit einer seltsamen Kombination mit Edelsteinversionen?

[edit]

Interessanterweise habe ich nur gelernt, dass der Rücklaufwert keinen Einfluss auf die Effekte hat, ob die Methoden weiter entlang der Kette laufen oder nicht, ob eine Weiterleitung oder Render aufgerufen wird.

[edit 2]

Ich habe meine App auf Rails 3.2.3 aktualisiert, um zu sehen, ob er einen Effekt hatte, aber das Problem nicht behoben hat. Etwas, das ich entdeckt habe, ist, dass die in einem Anwendungskontrolller definierten Vorfilter aufgerufen werden, aber die in meinem Gruppen-Kontroller sind nicht.

War es hilfreich?

Lösung

Nun, dies ist ein sehr timerübergreifender Weg, um einen neuen Tidbit über das Caching zu lernen.

Es stellt sich heraus, dass Sie den Anruf an cacheces_action nach the dore_filters erstellen müssen, die Sie ausführen möchten.Ich hatte die Caches-Aktion als eines der ersten Dinge in meiner Klasse platziert.Dies bedeutete, dass nicht alle vor dem Filter ausgeführt wurden, da sie unter / nach der Cache / nach der Cache -_Action erschienen wurden, und Cache_Action stoppt den Laufen des Codes (und serviert das zwischengespeicherte Ergebnis).

dank pan thomakos für Seine Antwort , die dieses Juwde der Info enthielt -, das entweder nicht in den Rubin-Dokumenten ist oder ich übergeht.Ich werde mich bemühen, diese Informationen zu den Dokumenten hinzugefügt habe, sobald ich es geschafft habe, die Zeit, die aufgrund dieses kleinen Blindspots verloren geht.

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