Trilhos - cache de fragmento não expirar
-
23-08-2019 - |
Pergunta
Este tem-me perplexo.
Eu tenho uma visão com um fragmento em cache:
- cache :key=>"news" do
%h2 News
- etc
Eu tenho um varredor que usa:
def expire_home_cache
puts "expire_home_cache"
expire_fragment(:key => "news")
end
O varredor é chamado como eu posso ver "expire_home_cache" na saída do console.
Mas o fragmento não é atualizado ...
Todas as idéias?
Solução
Você pode tentar o seguinte:
cache("news") do
%h2 News
- etc
end
e ...
def expire_home_cache
puts "expire_home_cache"
expire_fragment("news")
end
... ou tentar fazer isso ...
- cache({:key=>"news"}) do
%h2 News
- etc
Eu estou pensando que o problema pode ser que Ruby ou Rails está tendo um momento difícil determinar o que a chave é exatamente e por isso o método de cache e expire_fragment estão gerando duas chaves de cache diferentes.
Outras dicas
Tente substituir expire_fragment(:key => "news")
com ActionController::Base.new.expire_fragment(:key => "news")
Não há tempo para explicar, mas ele trabalhou para mim.
A maneira correta de fazer isso é:
cache :news do
...
end
E, em seguida, em sua vassoura:
expire_fragment :news
Esta não responder diretamente sua pergunta, mas você já tentou o timed_fragment_cache plugin como uma alternativa?
http://github.com/tricycle/timed_fragment_cache/tree/master
Eu encontrei este para ser uma maneira muito mais simples de expirar fragmentos em meus projetos.