6

레일즈 4는 조각 캐시 무효화를 돕기 위해 cache_digests (https://github.com/rails/cache_digests)를 사용합니다. cache_digests는 템플릿 및 해당 알려진 모든 종속성의 MD5 해시를 생성하여 조각 캐시가 무효화되도록 허용합니다. 템플릿 또는 종속성이 변경됩니다.stylesheet_link_tag로 레일 4 조각 캐싱

제 질문은 rake assets:precompile 동안 application.css 파일의 MD5 해시가 변경되면 조각 캐시 래핑 stylesheet_link_tag이 무효화됩니까? 지금 바로 헤더에서 확인하십시오 :

<% cache("header-cache-key") do %> 
    <%= stylesheet_link_tag "application" %> 
    <%= javascript_include_tag "application" %> 
<% end %> 

안전한가요? CSS 또는 JS가 변경 될 때 application-xxxxxxx.cssapplication-yyyyyyy.css이되지만 Google 헤더가 이전 application-xxxxxxx.css으로 캐시 될 것이라는 두려움이 있습니다. 그런 다음 application-xxxxxxx.csspublic/assets에서 사라지면 추악한 페이지가 표시됩니다.

답변

1

컴파일 된 CSS/JS의 변경시 캐쉬가 삭제되거나 무효화되지 않습니다.

코드 변경시 레일스가 캐시를 파열시키는 방식은 파일의 해시를보기의 캐시 키에 삽입하여 수행됩니다.

예를 들어보기 파일이 app/views/layouts/application.html.erb 인 경우 레일스는 파일 내용 (즉, 실행 결과가 아닌 HTML/Ruby 코드)에서 해시를 생성합니다. 생성 된 해시가 'abdefg123'인 것처럼 행동합시다. application.html.erb는 다음 캐시 코드가있는 경우

는 :

<% cache("header-cache-key") do %> 
    <%= stylesheet_link_tag "application" %> 
    <%= javascript_include_tag "application" %> 
<% end %> 

생성 된 실제 캐시 키 라인 "views/layouts/application-abcdefg123/header-cache-key"의 함께 무언가이다.

컴파일 된 CSS/JS가 실제로 파일의 Ruby/HTML을 변경하지 않기 때문에 레이아웃 코드의 계산 된 해시가 변경되지 않으므로 'header-cache-key' 캐시가 파기되지 않았 음을 의미합니다.