2011-08-16 4 views
6

私のコントローラは、このました:レール3のキャッシング:という名前のルートのためのアクションを期限切れ

:私はこれを見るログファイルに

match '/render_c_t/:channel_id' => 'render#render_ticker_for_channel', :as => :render_channel_ticker 

:私はこれを持って私のルートで

caches_action :render_ticker_for_channel, :expires_in => 30.seconds 

ファイル

Write fragment views/mcr3.dev/render_c_t/63 (11.6ms) 

これを手動で期限切れにするにはどうすればよいですか?私は、レンダリングコントローラとは別のコントローラからこれを期限切れにする必要がありますが、レンダリングコントローラ内でさえも、正しいものを期限切れにすることはできません。

私が行う場合:

expire_action(:controller => 'render', :action => 'render_ticker_for_channel', :id => c.id) 

私は以下を参照してください

Expire fragment views/mcr3.dev/render/render_ticker_for_channel/63 (3.2ms) 

私が行う場合:

私は見
expire_action(:controller => 'render', :action => 'render_c_t', :id => c.id) 

Expire fragment views/mcr3.dev/render/render_c_t/63 (3.2ms) 

この:

expire_action("render_c_t/#{c.id}") 

が生成する:

Expire fragment views/render_c_t/63 (3.5ms) 

は、どのように私はそれがcaches_action 'を生成していることと同じパスを期限切れに取得することができます!

+0

私は完全な本格的な回答としてこれを追加するには自信がありませんが、バックドアを試しましたか? 'Rails.application.routes.url_helpers'はあなたのヘルパーにアクセスして、Locationヘッダーのブラウザに送られるパスやURLを返します。 'Rails.application.routes.url_helpers.render_ticker_for_channel_path(63)'と 'Rails.application.routes.url_helpers.render_ticker_for_channel(63、:host => 'mcr3)を試してください。dev ') '結果の文字列を(ある操作で)' expire_action'に渡し、正しいキャッシュされたチャンクを見つけることができるかもしれません。醜いですが、** file_store **にキャッシュがある場合は、 –

答えて

0

これを行うにはさらに「Rails Way」が必要ですが、これはバックドアとして機能する可能性があります。Rails.application.routes.url_helpersはヘルパーにアクセスできるようにし、それぞれがパスやURLの文字列を返しますロケーションヘッダーのブラウザに送信されます。

def funky_action_cache_name(route, params) 
    Rails.application.routes.url_helpers.send(route.to_s+'_url', params).gsub(/https?:\/\//,'') 
end 

# expire_action(funky_action_cache_name(:render_ticker_for_channel, :id => 63)) 

いくつかの操作にhttp://mcr3.dev/render_c_t/63

を返す必要があります/render_c_t/63Rails.application.routes.url_helpers.render_ticker_for_channel(63, :host => 'mcr3.dev')は、あなたが2番目の文字列は、Railsがキャッシュされたアクションのために使用される名前に戻って取得することを離れて解析することができ返すべきRails.application.routes.url_helpers.render_ticker_for_channel_path(63)をお試しください

最も美しい解決策ではありませんが、うまくいくはずです!

5

expire_fragmentの正規表現のバージョンを使用します

expire_fragment %r{render_c_t/#{c.id}/} 
+0

が動作する可能性があります。これは正規表現で期限切れにする最善の方法です – Anatoly

-1
caches_action :render_ticker_for_channel, :if => proc do 
    !!params['doCache'] 
end 

をしかし、このソリューションが動作するために、我々は、クエリ文字列を介して、または身体を投稿いずれかに渡すパラメータを渡す必要があります。

関連する問題