monolithic kernel

Ramazeでレンダリング結果をファイルにキャッシュする

mod_rewriteを使ってCGI環境で超高速にキャッシュを返す」という記事を読んで、Ramazeで同じことをやろうとしたら結構困ったのでメモしておきます。ちなみに、Ramazeに標準で用意されているキャッシュはメモリ上にキャッシュするものなので、CGIでは使えません。

キャッシュを生成するためにはレンダリング結果のHTMLが必要なわけですが、Ramazeにはレンダリング結果を読んだり書いたりする方法は(たぶん)用意されていません。そのため、Ramaze内部のレンダリングを行っているメソッドを上書きして強引にデータを読み取ります。

module Ramaze
class Action
unless method_defined?(:static_html_original_render)
alias_method :static_html_original_render, :render
end
def render
# オリジナルのレンダリング処理を呼び出す
content = static_html_original_render
# ここで適当に content の内容を保存
# full_pathでリクエストのパスがとれるのでこれを使うとよいです
# オリジナルと同じ値を返す
content
end
end
end

あとは冒頭で挙げた記事にあるように、.htaccessで制御、cronで古いキャッシュの削除を行えばOKです。