2011-09-28 39 views
0

我有一個Rails 2.3.4應用程序的奇怪問題。 expires_in時間在每小時後設置爲10秒。但是,即使在緩存刷新後,memcache似乎也記得這個值。rails2 memcache expires_in問題

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

內存緩存輸出:

<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 
+0

不完全相關的,我不覺得,但是你需要執行'.CALL(CONTROLLER_NAME)''你{Proc.new上|控制器| 「...」}'。 –

回答

1

嘗試把一個進程內的expires_in值。

編輯:我忘了提及最後調用proc .call

+0

感謝您的建議,但我收到錯誤:'RuntimeError(:expires_in必須是一個數字):' –

+0

'caches_action'的全部代碼是什麼? – James

+0

我剛剛編輯了我忘記加入的答案。 – James

1

確保你實際上是使用 memcached,而不是rails默認的緩存機制。你應該有這樣的事情在你的environment.rb:

config.cache_store = :mem_cache_store 

我也有類似的問題,而試圖讓緩存與合作:expires_in我沒有意識到這是需要上面。沒有它,rails默認使用FileStore或MemoryStore,兩者都將愉快地坐在那裏緩存,但忽略:expires_in選項。

感謝this article on memcached basics by Rob Anderton幫助我到底算出來