2009-04-16 7 views

Répondre

7

entrées de fragments de cache sont créés avec une touche légèrement différente de celle que vous accédez à Rails.cache.

Utilisez expire_fragment à la place (vous pouvez l'envoyer à un contrôleur): http://api.rubyonrails.org/classes/ActionController/Caching/Fragments.html#M000438

+0

Cela ne fonctionne pas pour moi. Si cela ne fonctionne pas pour vous essayer trop 'Rails.cache.delete_matched « vues/site_search_form * »' – yivo

+0

Au Rails 3, les caches fragments ont un hachage à la fin, qui est basé sur le contenu de la vue dans laquelle ils Sont générés. C'est ainsi que le cache est automatiquement supprimé si la vue change, mais il est difficile d'expirer par clé. Vous pouvez dire à Rails de ne pas ajouter le hachage avec 'skip_digest: true' dans l'appel du cache. Plus d'info: https://www.reinteractive.net/posts/197-if-you-explicitly-expire-cached-fragments-opt-out-of-cache-digests –

54

ActionController :: Base.new.expire_fragment (clé)

+2

rubis-1.8.7-P334: 007> ActionController :: Base.new.expire_fragment (: controller => 'principale',: action => 'index') NoMethodError: méthode définie 'host_with_port » pour nil: NilClass – pixelearth

+1

Comme des rails 3, les caches ont un fragment de hachage à la fin , qui est basé sur le contenu de la vue dans laquelle ils sont générés. C'est ainsi que le cache est automatiquement supprimé si la vue change, mais il est difficile d'expirer par clé. Vous pouvez dire à Rails de ne pas ajouter le hachage avec 'skip_digest: true' dans l'appel du cache. Plus d'infos: https://www.reinteractive.net/posts/197-if-you-explicitly-expire-cached-fragments-opt-out-of-cache-digests –

2
Rails.cache.delete "views/site_search_form" 
0

Dans Rails 5 Je pris les mesures suivantes pour le buste le cache sans recourir à skip_digest: true. Notre problème était que la modification de la valeur des chaînes I18n ne se reflétait pas dans le résumé du cache calculé, de sorte que le cache ne serait pas automatiquement supprimé.

Voici le point de vue où le bloc de cache est défini:

/ views/layouts/_footer.html.slim 
- cache :footer do 
    span= t('shared.footer') 

Puis dans la console rails je cours:

fragment = ActionController::Base.new.view_context.cache_fragment_name(:footer, virtual_path: 'layouts/_footer.html.slim') 
ActionController::Base.new.expire_fragment(fragment) 

cache_fragment_name va comprendre le résumé basé sur l'argument mot-clé virtual_path.

Questions connexes