caches_actionの後に処理を行いたい

Ruby on Railsのcaches_actionでキャッシュヒットした時に、リクエストログを保存したりしたい。

初めてRailsのキャッシュ機構を触るわけですが、caches_actionとやらでは、キャッシュヒット時点でフィルタ処理を中断(終了)する様です。after_filterでログ記録処理を行っているアクションに対して、caches_actionでキャッシュを利用する場合にどうするのが一般的なのでしょうか。

とりあえず、キャッシュヒット後の挙動であるrender_for_textをオーバーライドして、rendered_action_cacheとアクション名を見て後処理を云々とかしてみましたが、無理矢理すぎて嫌な感じです。

_withなんたらを使うのか、alias_なんたらでbeforeをのっとってやればいいのか。いまだにRailsを理解しきれていないので、何が普通の手段なのかよくわかりません。

ActionController::Caching::Actions::ActionCacheFilter#beforeを、alias_methodだか何だかを使ってbefore_hogeにリネームして、自前のbeforeを書いて、そのbeforeの中でbefore_hogeと適当な処理を実行する様にしたらいいのでしょうか。

「負荷軽減のためにキャッシュ使いたいけど、after_filterも使いたい」という場合の、一般的な方法ってどんなでしょうか?


まあ、純粋なHTTPのリクエストログを記録したいだけなら、(後でまとめて)Apacheログをパースしてやればいいわけですがね。それはそれで、いろいろと面倒があったりするので、今回はリアルタイムでの記録にこだわってみたかったりします。

プロフィール

このブログ記事について

このページは、koshigoeが2008年7月31日 22:10に書いたブログ記事です。

ひとつ前のブログ記事は「gist(およびgithub)初利用」です。

次のブログ記事は「/proc/[number]/memの中身を知りたい」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。