2009-04-16 10 views

答えて

7

キャッシュフラグメントのエントリは、Rails.cacheでアクセスするものとは少し異なるキーで作成されます。

使用expire_fragment代わりに(あなたは、コントローラに送信することができます):http://api.rubyonrails.org/classes/ActionController/Caching/Fragments.html#M000438

+0

これは私にとっては役に立ちません。これがうまくいかない場合は、 'Rails.cache.delete_matched 'views/site_search_form *'' – yivo

+0

Rails 3では、フラグメントキャッシュの最後にハッシュがあります。このハッシュは、ビューの内容に基づいていますが生成される。これは、ビューが変更された場合にキャッシュが自動的に破棄されるため、キーで期限切れにするのが難しくなります。キャッシュ呼び出しで 'skip_digest:true'でハッシュを追加しないようにRailsに指示することができます。詳細情報:https://www.reinteractive.net/posts/197-if-you-explicitly-expire-cached-fragments-opt-out-of-cache-digests –

54

ActionController :: Base.new.expire_fragment(キー)のRails 5では

+2

ruby​​-1.8.7-p334:007> ActionController NoMethodError:未定義のメソッド 'host_with_port 'for nil:NilClass – pixelearth

+1

Rails 3の時点で、フラグメントキャッシュの最後にハッシュがあります(:: controller =>' main '、:action =>' index ')これは、生成されたビューの内容に基づいています。これは、ビューが変更された場合にキャッシュが自動的に破棄されるため、キーで期限切れにするのが難しくなります。キャッシュ呼び出しで 'skip_digest:true'でハッシュを追加しないようにRailsに指示することができます。詳細情報: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

は、私はバストには、次の手順を取りましたキャッシュはskip_digest: trueに頼らずに私たちの問題は、I18n文字列の値を変更することは、計算されたキャッシュダイジェストに反映されないので、キャッシュは自動的に破られないということでした。ここで

は、キャッシュ・ブロックが定義されている図である。

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

は、次にレールコンソールで私が実行します。

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

cache_fragment_namevirtual_pathキーワード引数に基づいてダイジェストを把握します。

関連する問題