0

Rails 2.3.4 アプリケーションで奇妙な問題が発生しました。expires_in 時間は、1 時間ごとに 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  
4

2 に答える 2

1

railsのデフォルトのキャッシュメカニズムではなく、実際にmemcachedを使用していることを確認してください。あなたのenvironment.rbにこのようなものがあるはずです:

config.cache_store = :mem_cache_store

:expires_inでキャッシングを機能させようとしたときに、同様の問題が発生しました。上記が必要であることに気づきませんでした。これがないと、railsはデフォルトでFileStoreまたはMemoryStoreを使用します。どちらもキャッシュに配置されますが、:expires_inオプションは無視されます。

最終的にこれを理解するのを手伝ってくれたRobAndertonによるmemcachedの基本に関するこの記事に感謝します

于 2011-11-15T16:26:30.033 に答える
1

expires_inプロシージャ内に値を入れてみてください。

編集:最後にprocを呼び出すことを忘れてい.callました。

于 2011-09-28T17:20:03.743 に答える