簡単キャッシング
お金のことではないですよ。もちろん、railsネタです。
ActionControllerのcaches_pageという機能を使います。
やることは3つです。
1.config/environments/production.rb(開発中ならdevelopment.rb)の
設定を確認して以下のようにtrueにします。
config.action_controller.perform_caching=true
デフォルトな設定の場合
作成されるキャッシュファイルの拡張子はhtml
保存場所は、public以下にroutes.rbに従って、
コントローラ名/アクション名フォルダのように作成されます。
また、デフォルトではなく変更したい人向けのオプションもあります。
拡張子と保存ディレクトリを適宜変更できます。
config.action_controller.page_cache_extension='.html'
config.action_controller.page_cache_directory='/public/caches'
2.コントローラに、キャッシュしたいメソッド名というかアクション名を以下のように追加します。
caches_page :キャッシュしたいメソッド名1,:キャッシュしたいメソッド名2…
準備は、たったこれだけです。
2で設定されたアクションのページにアクセスしてみてください。
指定フォルダにキャッシュファイルが作成されています。楽チンですよ。
一生ずっと内容が変わらないコンテンツであれば
これでよいのですが、普通はそうはいきません。
必ずページは更新されるはずです。
3.キャッシュファイルの更新
作成されたキャッシュファイルを消した後、
もう一度ページにアクセスすればキャッシュは更新されます。
消す方法はいくつか考えられると思いますが、
railsの機能としてはexpire_pageがあります。
たとえば、以下のようなイメージです。
showでキャッシュ作成、updateでキャッシュ削除
PhotosController
caches_page :show
def show
photo=Photo.find(:first, :conditions=>['id=?',id])
end
def update
Photo.update(id,{:column1=>'aaa',:culumn2=>'b'})
expire_page :action=>'show',:id=>id
end
ちなみに
OFINDERの場合、
GMAIL受信時(cronです)に写真が追加されたページのファイルを
消してあげるようにしました。
cache_file="キャッシュフォルダ/#{id}.html"
FileUtils.rm(cache_file,{:force=>true})
あと、IMPORTでの検索結果はキャッシュしていません。
Posted on 4月 2nd, 2008 by mitsu
Filed under: OFINDER, rails | No Comments »