2013-07-29 2 views
0

J'ai la méthode suivante dans une balayeuse:comportement non déterministe de fragment_cache_key

 
def expire_topic_articles_cache_for topic_id 
    key = fragment_cache_key :controller => :articles, :action => :index, :topic_id => topic_id 
    Rails.logger.debug "Expire article list cache for topiC#{topic_id}" 
    Rails.logger.debug " using key #{key}" 
    # use RegExp due to the fragment covering multiple pages 
    expire_fragment %r{#{key}} 
end 

Le problème est d'appeler fragment_cache_key. Il renvoie la clé correcte dans un chemin de code, mais il retourne nil dans un autre chemin de code, les deux fois appelé avec le même topic_id, et les deux fois déclenchés par le même contrôleur mais à partir de différents modèles observés.

Cela n'a aucun sens pour moi. Je pense que fragment_cache_key retournera le même résultat pour la même entrée. Il devrait être libre d'effets secondaires étant donné que la même configuration de cache est utilisée (et c'est la même chose dans les deux chemins de code).

Répondre

0

Soupir ... Après avoir creusé ici pendant un certain temps, j'ai trouvé cette réponse:

https://stackoverflow.com/a/2275001/124536

Cela m'a pris sur le bon chemin: Le contrôleur n'a pas configuré le cache_sweeper pour cette action particulière qui a déclenché le balayeur. Assez étrange le balayeur a été déclenché de toute façon, mais ne fonctionne pas correctement.

Questions connexes