2012-04-26 5 views
2

최근에 Rails 애플리케이션 용 Dalli gem을 사용하여 memcached heroku 부가 기능으로 캐싱을 구현했습니다. 하지만 Heroku에 배포 할 때 이미지를 비롯한 모든 정적 자산을 캐시하여 내 memcached 크기를 빠르게 날려 버립니다. heroku 로그 샘플은 다음과 같습니다.Memcached/Dalli로 캐싱에서 이미지 제외

cache: [GET /assets/application.css] fresh 
app[web.1]: cache: [GET /assets/sign-in-twitter.gif] fresh 
app[web.1]: cache: [GET /assets/ajax-loader.gif] fresh 
app[web.1]: cache: [GET /assets/sign-in-facebook.gif] fresh 

특히 인덱스 페이지의 경우 캐시 요구 사항이 서로 다른 요청마다 약 5MB 증가합니다. 이 동작을 구성 할 수 있습니까? 내 조각 캐시 만 캐시하고 각 페이지의 모든 이미지를 사전에 캐시하지 않도록 memcached를 구성 할 수 있습니까? 크루즈 보석을 사용

답변

5

config/environments/production.rb에서 :

 
config.action_dispatch.rack_cache = { 
    :metastore => Dalli::Client.new, 
    :entitystore => 'file:tmp/cache/rack/body', 
    :allow_reload => false 
} 

위의 구성은 파일 시스템에 memcached와의 메타 스토어 정보하지만 자산의 실제 몸을 캐시합니다. config/application.rb에서

:

 
if !Rails.env.development? && !Rails.env.test? 
    config.middleware.insert_before Rack::Cache, Rack::Static, urls: [config.assets.prefix], root: 'public' 
end 

랙 :: 정적 사용 :
    랙 :: 정적 미들웨어 루트 디렉토리에 일치하는 접두사가있는 URL을 제공합니다. 여기에 config.assets.prefix을 내 URL 접두사로 사용하여 기본값은 '/ assets'입니다. 이 경우 Rails :: Cache 대신 public/assets 디렉토리에서 직접 자산을 처리해야합니다. 프로덕션 환경에서 'rake assets : precompile'을 실행하는 경우에만 작동합니다. 그렇지 않으면 'public/assets'에 사전 컴파일 된 애셋이 없습니다.