使用 Memcached / Dalli 从缓存中排除图像



我最近在我的 Rails 应用程序中使用 Dalli gem 使用 memcached heroku 插件实现了缓存。我发现当部署到 Heroku 时,它还会缓存我所有的静态资产,包括图像,这很快就会放大我的 memcached 大小。英雄日志示例如下所示

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 配置为仅缓存我的片段缓存,而不是主动缓存每个页面中的每个图像吗?

使用 dalli gem, In config/environments/production.rb

config.action_dispatch.rack_cache = {  :metastore => Dalli::Client.new,  :实体存储 => '文件:tmp/cache/rack/body',  :allow_reload => 假}

上述配置将元存储信息缓存在 memcached 中,但将资产的实际正文缓存到文件系统中。

config/application.rb

如果!Rails.env.development?&& !Rails.env.test?  config.middleware.insert_before Rack::Cache, Rack::Static, urls: [config.assets.prefix], root: 'public'结束
机架::

静态使用:
  Rack::静态中间件提供具有与根目录匹配前缀的 URL。在这里,我给出config.assets.prefix 作为我的url前缀,默认为"/assets"。这应该直接从 public/assets 目录之外提供任何资产,而不是命中 Rails::Cache。这只有在生产中运行"rake assets:precompile"时才有效,否则"public/assets"中将没有预编译资产。

最新更新