Ich habe eine Aktion, die ich über Cache-Wie bekomme ich caches_action, um Verfalls-Header zu setzen, wenn es einen Treffer in memcached gibt?
caches_action :my_action, :expires_in=>1.hours
und stellte auch die Header in der Aktion gültig bis sich
def my_action
...
expires_in 1.hours
send_data(...,:disposition => 'inline',:type => 'image/png',:filename => params[:title]+".png")
end
jedoch verwenden, wenn ich an der Steuer-Antwort-Header-Cache aussehen von einem Ergebnis, dass als Ergebnis eines memcached-Hit kommt, bekomme ich diese:
Cache-Control: private, max-age=0, must-revalidate
Das erste Mal rund, das heißt, wenn nichts im Cache ist, ist es wha t Ich gehe davon aus, d.h .:
Cache-Control: max-age=3600, private
Es ist wie Schienen + Memcached sieht weder die Original-Response-Header das Caching, noch Setzen entsprechender Header selbst. Das Ergebnis ist, dass der Client jedes Mal eine Anforderung an den Server stellt, auch wenn sich das Ergebnis (ein Bild) nicht geändert hat. Obwohl die Aktion schnell beendet wird, wenn sie im Cache gelandet wird, werden immer noch alle Daten erneut gesendet, was ich vermeiden möchte.
Wie bekomme ich die Header, um das Richtige zu tun, so dass der Client entweder überhaupt keine Anfrage macht oder eine "nicht modifizierte" Antwort bekommt?
ja Caching ist eingerichtet und funktioniert OK - das Problem ist die zweite gehen, wenn es einen Treffer im Memcache gibt, die Header nicht gesetzt werden. Auch beim zweiten Durchlauf würde die Aktion wegen des Treffers in Memcache nicht aufgerufen werden, so dass das dritte Codefragment keine Auswirkung hat. – frankodwyer
Oh, ich verstehe. Ich hatte dein Problem in die falsche Richtung. Das ist merkwürdig. Können Sie die relevanten Fragmente der Protokolle veröffentlichen? – askegg
Gemäß diesem Post nimmt Rails möglicherweise ein HTML-Dokument an, daher stimmt der Schlüssel möglicherweise nicht mit Ihrer Anfrage überein. Nur ein Gedanke. http://gilesbowkett.blogspot.com/2007/07/little-rails-image-caching-caveat.html – askegg