2012-04-26 7 views
2

最近、私のRailsアプリケーションでDalli gemを使ってmemcached 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では、dalli宝石を使用して:

 
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'にプリコンパイルされたアセットはありません。

関連する問題