Rails Action Caching Frage
-
15-10-2019 - |
Frage
Ich bin mir nicht ganz sicher, wie ich sicherstellen kann, dass mein Caching funktioniert, aber ich bin mir ziemlich sicher, dass dies nicht der Fall ist. Ich habe einen Benutzer -Controller mit einer Indexaktion, die ich um eine Aktion eingestuft habe, bis ein neuer Benutzer erstellt wurde. Hier ist der Code:
UsersController < ApplicationController
caches_action :index
def index
@users = User.all
end
def create
expires_action :index
...
end
end
Jetzt in meinen Protokollen, wenn ich auf die zugreife index
Aktion, ich sehe:
Cached fragment hit: views/localhost:3000/users (0.0ms)
Filter chain halted as [#<ActionController::Filters::AroundFilter:0xe2fbd3 @identifier=nil, @kind=:filter, @options={:only=>#<Set: {"index", "new"}>, :if=>nil, :unless=>nil}, @method=#<Proc:0x186cb11@/Users/bradrobertson/.rvm/gems/jruby-1.5.3/gems/actionpack-2.3.10/lib/action_controller/caching/actions.rb:64>>] did_not_yield.
Ich bin mir nicht sicher, was die filter chain halted ... did_not_yield
Es geht alles um und ich sehe das auch das select * from users
... wird jedes Mal aufgerufen, was ich nicht erwartet habe.
Kann mich jemand aufklären, was hier vor sich geht und warum sich das nicht so verhält, wie ich es erwarten würde? dh. Warum der Benutzer. Alle würden ausgeführt, wenn die Ausgabe der gesamten Aktion zwischengespeichert werden sollte?
Lösung
Das filter chain halted
Nachricht bedeutet, dass es einen Umgebungsfilter gibt, der die Aktion anruft. Dies ist wahrscheinlich der Aktionscache, der die wirkliche Aktion verhindert. Es hat nicht Ertrag zur Aktion, weil es etwas im Cache gefunden hat, wie in der oben genannten Nachricht vorgeschlagen.
Das User.all
Sollte überhaupt nicht ausgeführt werden, weil es in der Aktion ist, aber alle Filter werden ausgeführt. Wenn Ihre Seite hinter einer Authentifizierungsform steht, könnte die Authentifizierungsprüfung möglicherweise den SQL -Aufruf ausgelöst. Vielleicht möchten Sie überprüfen, woher das SQL -Protokoll wirklich stammt.
Außerdem ist die richtige Syntax (zumindest nach dem Rails Guide) zum Ablauf:
expire_action :action => :index
Mehr Info: Rails Guide