2011-12-24 20 views
0

私はヘロクのRails 3アプリで:expires_inオプションを使用してアクションキャッシュを使用しています。私はexpire_actionを更新時にコントローラで直接呼び出すことを試みました。何もキャッシュエントリを正しく期限切れにしていないようです。ヘロクでMemcachedエントリを期限切れにするには

expire_action :action => :embed, :format => :js 

そして、私はまた、正確なキーを取得するには、URLジェネレータを使用しようとすると、スイーパーでそれをしようとしました:私のアクションで

caches_action :embed, :if => Proc.new { |c| c.request.format.js? || c.request.format.rss? }, :expires_in => 5.minutes 

:私のコントローラで

expire_action obj_embed_url(@obj.unique_token) 

有効期限切れではないワニスキャッシュ層を使用しているのはHerokuですか? (キャッシュは5分後にはっきりと期限切れになるので、コンテンツの更新が見えるので)。私はmemcachedアドオンが正しく設定されているようです(Dalli gem; config.cache_store =:dalli_storeを使用しています)。適切な環境変数...

$ heroku config |grep MEM 
MEMCACHE_PASSWORD  => xxxxxxxxxxxxxxxxx 
MEMCACHE_SERVERS  => xxx.xxx.northscale.net 
MEMCACHE_USERNAME  => appxxxxxx%40heroku.com 

私はここで何が欠けていますか?

+0

ワニスのCache-Controlヘッダが設定されているだろう唯一のキャッシュファイルが。 Cedarで実行している場合は、これがファイルシステムにキャッシュされていないことを確認してください。 (再展開すると、新しいdynoが作成され、テストとしてクリアされます) –

+0

このアプリケーションはbamboo-ree-1.8.7上にあります。はい、私はワニスを避けたかったのは、memcached(メモリ内)を使用してキャッシュコントロールの長さよりも早く期限切れにできないためです。 – sands

答えて

1

最終的にこれを考え出しました。

Herokuのパスは、期限切れのcreate/expire呼び出しと一致してはいけません。そのため、キャッシュ作成でパスを指定し、そのパスを期限切れで明示的に呼び出すと、そのパスが機能します。また、私は "expire_action"ではなく "expire_fragment"を使用しなければなりませんでした。ここに私のコードは次のとおりです。あなたのコントローラで

:期限切れの方法で

caches_action :load, :up, :juice, :fresh, :cache_path => :custom_cache_path.to_proc 

def custom_cache_path 
    path = "#{params[:controller]}/#{params[:action]}" 
    path += "/#{params[:id]}" if params[:id] 
    path += "/#{params[:sha]}" if params[:sha] 
    path 
end 

expire_fragment "serve/up/#{@site.id}" 
expire_fragment "serve/fresh/#{@site.secret}" 
関連する問題