1

在 Heroku、Dalli 和 Memcachier 上使用 Rails 3.1.1。

生产.rb

  config.cache_store = :dalli_store 
  config.action_controller.perform_caching = true

宝石文件

  gem 'memcachier'
  gem 'dalli'

控制器#显示

unless fragment_exist?("gift-show--" + @gift.slug)
 # Perform complicated database query at 4-5 sec
end

看法

<% cache('gift-show--' + @gift.slug, :expires_in => 3456000) do # 40 days %>
  # Create an HTML
<% end %>

加载缓存页面时的日志输出

2012-10-17T03:15:43+00:00 app[web.2]: Started GET "/present/baka-kaka-set" for 23.20.90.66 at 2012-10-17 03:15:43 +0000
2012-10-17T03:15:43+00:00 app[web.2]: Could not find fragment for gift-show--baka-kaka-set # my log comment
2012-10-17T03:15:44+00:00 heroku[router]: GET www.mydomain.com/present/baka-kaka-set dyno=web.2 queue=0 wait=0ms service=195ms status=200 bytes=17167
2012-10-17T03:15:43+00:00 app[web.2]: cache: [GET /present/baka-kaka-set] miss
2012-10-17T03:15:43+00:00 app[web.2]:   Processing by GiftsController#show as */*
2012-10-17T03:15:43+00:00 app[web.2]:   Parameters: {"id"=>"baka-kaka-set"}
2012-10-17T03:15:43+00:00 app[web.2]: Exist fragment? views/gift-show--baka-kaka-set (1.5ms)
2012-10-17T03:15:43+00:00 app[web.2]: Read fragment views/gift-show--baka-kaka-set (1.5ms)
2012-10-17T03:15:43+00:00 app[web.2]: Write fragment views/gift-show--baka-kaka-set (4.0ms)

每个页面在创建后几乎都是静态的,因此有效期很长(40 天)。

如果我加载这样的页面,它似乎被写入缓存,我可以通过重新加载页面来验证这一点,并看到它绕过了控制器(如我所料)并非常快速地传递页面。

我的问题

问题是如果我几分钟后返回该页面,它已经从缓存中删除了!fragment_exist?('gift-show--gift-baka-kaka-set')返回 false (也是如此Rails.cache.exist?('views/gift-show--gift-baka-kaka-set')

我可以在 Memcachier 分析中看到键的数量正在减少。即使我运行一个加载每个页面的脚本(以创建片段缓存),Memcachier 中的键数也不会以相同的速度增加。

我在 Memcachier 中的内存使用量约为 34%,所以我没有接近极限。

我的问题

我做错了什么吗?我应该怎么做?

可能是我正在写入两个不同的缓存或其他东西吗?

日志文件的最后一行让我有点困惑。似乎即使在读取片段之后,仍在写入新片段?这很奇怪吗?

更新1:我意识到我已经注释掉了这一行:

  # Set expire header of 30 days for static files
  config.static_cache_control = "public, max-age=2592000"

前。这会导致问题吗?缓存的操作是否被视为“静态资产”?

4

1 回答 1

0

原来是 Memcachier 中的一个错误。Memcachier 支持得出了这个结论,它与 Memcache 配合得很好。Memcachier 将尝试修复该错误。

于 2012-10-18T06:23:44.887 回答