Step by Step Ruby on Rails

Ruby on Railsで実際にWebサイトを構築する手順をまとめています。

Rails4のアクションキャッシングの利用例

Rails4のアクションキャッシュの利用例をまとめました。
 
ページキャッシュは、認証などのフィルターが定義されている場合は使用できませんが、アクションキャッシュはbeforeフィルターが定義されていても使用できます。
 
目次
(1)アクションキャッシュを使用するには?
(2)アクションキャッシュの基本的な使用例
(3)アクションキャッシュの設定例
 
(1)アクションキャッシュを使用するには?
 
Rail4からはアクションキャッシュ機能がコアから削除されているのでGemを追加する必要があります。
 
$ vi Gemfile
 
gem 'actionpack-action_caching'
 
$ bundle install
 
Using actionpack-action_caching (1.1.1)
 
(2)アクションキャッシュの基本的な使用例
 
ここでは、"blog"というコントローラを作成し、アクションキャッシュを設定しています。
 
①scaffoldで"blog"を作成
 
$ rails generate scaffold blog title:string description:string
$ bundle exec rake db:migrate
 
②indexアクションにアクションキャッシュを設定
 
$ vi app/controllers/blogs_controller.rb

class BlogsController < InheritedResources::Base
  caches_action :index
  def index
    @blogs = Blog.all
  end
end

 
③データを登録
 
$rails c
 
> Blog.create(title: 'sample post', description: "sample")
 
④動作確認
 
ブラウザで"http://localhost:3000/blogs/"にアクセス。
 
tmp/cacheディレクトリ配下にいくつかのディレクトリが自動で作成されその配下にキャッシュファイル作成されていました。
 
・ログ確認
 
$ tail -500 log/development.log
 
Write fragment views/localhost:3000/blogs (1.0ms)
Completed 200 OK in 1455ms (Views: 1419.3ms | ActiveRecord: 0.7ms)
 
(3)アクションキャッシュの設定例
 
1)ifやunlessを使って条件を指定
 
jsonリクエストの場合にはキャッシュしない場合は次のように設定します。
 
$ vi app/controllers/blogs_controller.rb

  caches_action :index, 
    if: Proc.new{|c|!c.request.format.json?}

 
2)有効期限を設定
 
:expires_inオプションを設定します。デフォルトの単位は秒です。
 
$ vi app/controllers/blogs_controller.rb

  caches_action :index, 
    if: Proc.new{|c|!c.request.format.json?},
    expires_in: 60

 
有効期限が過ぎてからアクセスするとキャッシュファイルが同じファイル名で取得されて更新されていました。
 
3)アクションの中身のみをキャッシュする
 
layout: falseを指定します。
 
$ vi app/controllers/blogs_controller.rb

  caches_action :index, 
    if: Proc.new{|c|!c.request.format.json?},
    expires_in: 60,
    layout: false