Rails - cache di frammento non in scadenza
-
23-08-2019 - |
Domanda
Questo mi ha messo in difficoltà.
Ho una visione con un frammento cache:
- cache :key=>"news" do
%h2 News
- etc
Ho una spazzatrice che utilizza:
def expire_home_cache
puts "expire_home_cache"
expire_fragment(:key => "news")
end
La spazzatrice è chiamato come posso vedere "expire_home_cache" in uscita della console.
Ma il frammento non è aggiornato ...
Tutte le idee?
Soluzione
Si potrebbe provare questo:
cache("news") do
%h2 News
- etc
end
e ...
def expire_home_cache
puts "expire_home_cache"
expire_fragment("news")
end
... o provare questo ...
- cache({:key=>"news"}) do
%h2 News
- etc
Sto pensando il problema potrebbe essere che Ruby o Rails è un periodo difficile determinare ciò che la chiave è esattamente così e il metodo di cache e expire_fragment sta generando due differenti chiavi della cache.
Altri suggerimenti
Provare a sostituire expire_fragment(:key => "news")
con ActionController::Base.new.expire_fragment(:key => "news")
Non c'è tempo per spiegare, ma ha funzionato per me.
Il modo corretto per farlo è:
cache :news do
...
end
E poi nel spazzatrice:
expire_fragment :news
Questo non risponde direttamente alla tua domanda, ma hai provato il plugin timed_fragment_cache come alternativa?
http://github.com/tricycle/timed_fragment_cache/tree/master
Ho trovato questo per essere un modo molto più semplice di scadenza frammenti nei miei progetti.