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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top