2012-04-26 50 views
2

我最近使用Dalli gem爲我的Rails應用程序實現了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中的metastore信息,但該資產的實際身體到文件系統。

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 

架::靜態用法:
   的機架::靜態中間件提供了網址具有匹配前綴的根目錄。在這裏,我給config.assets.prefix作爲我的網址前綴,默認爲'/ assets'。這應該直接服務於公共/資產目錄中的任何資產,而不是擊中Rails :: Cache。只有在生產中運行'rake資產:預編譯',否則'public/assets'中將沒有預編譯資產。