2009-04-16 6 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

레일즈 3에서 프래그먼트 캐시의 끝에는 해시가 있습니다. 생성됩니다. 따라서보기가 변경되면 캐시가 자동으로 체포되지만 키로 만료되기가 어렵습니다. 캐시 호출에서'skip_digest : true'로 해시를 추가하지 않도록 Rails에 지시 할 수 있습니다. 추가 정보 : https://www.reinteractive.net/posts/197-if-you-explicitly-expire-cached-fragments-opt-out-of-cache-digests –

54

는 :: Base.new.expire_fragment (키) ActionController 레일 5에서

+2

ruby-1.8.7-p334 : 007> ActionController :: Base.new.expire_fragment (: controller => 'main', : action => 'index') NoMethodError : nil에 대해 정의되지 않은 메소드'host_with_port ': NilClass – pixelearth

+1

레일스 3의 경우, 프래그먼트 캐시의 끝에 해쉬가있다. 이는 생성 된 뷰의 내용을 기반으로합니다. 따라서보기가 변경되면 캐시가 자동으로 체포되지만 키로 만료되기가 어렵습니다. 캐시 호출에서'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 키워드 인수에 따라 다이제스트를 알아낼 것입니다 여기에

는 캐시 블록이 정의 된보기입니다.