rails2 memcache expires_in问题

时间:2011-09-28 16:59:06

标签: ruby-on-rails memcached ruby-on-rails-2

我对Rails 2.3.4应用程序有一个奇怪的问题。 expires_in时间设置为每小时后10秒。但即使在缓存刷新后,memcache似乎也记住了这个值。

caches_action :deals, :expires_in => (3600 - Time.now.to_i % 3600) + 10,
  :cache_path => Proc.new { |controller| "blah" }

Memcache输出:

<8 new client connection  
<8 get mynamespace:views/show  
>8 END  
<8 set mynamespace:views/show 0 1457 20499  
>8 STORED  
<9 new client connection  
<9 flush_all
>9 OK  
<9 connection closed.  
<8 get mynamespace:views/show  
>8 END  
<8 set mynamespace:views/show 0 1457 20499  
>8 STORED  

2 个答案:

答案 0 :(得分:1)

尝试将expires_in值放在proc。

编辑:我忘了提到最后用.call调用proc。

答案 1 :(得分:1)

确保您实际上使用 memcached,而不是rails默认缓存机制。你的环境中应该有这样的东西.rb:

config.cache_store = :mem_cache_store

我在尝试使用缓存时遇到了类似的问题:expires_in我没有意识到上面的内容是必需的。如果没有它,rails默认使用FileStore或MemoryStore,两者都会很高兴地坐在缓存中,但忽略:expires_in选项。

感谢this article on memcached basics by Rob Anderton帮助我最终解决这个问题