LoginSignup
3
6

More than 5 years have passed since last update.

Railsの動的レスポンスをCloudFrontにキャッシュさせる

Last updated at Posted at 2018-11-16

やりたいこと

Railsで以下のような条件のデータをCloudFrontにキャッシュさせる
- レスポンスをはやくしたい
- 更新頻度が低い
- 最新の情報を配信する必要が無い

デフォルトの動作

RailsのデフォルトのレスポンスにはCache-Control: max-age=3600, privateというヘッダが付与されているため、CloudFrontのキャッシュ対象(X-Cache: Miss from cloudfront)にならない。

$ curl -i https://xxxxx.cloudfront.net/users.json
HTTP/2 200
...
Cache-Control: max-age=3600, private
...
X-Cache: Miss from cloudfront
...

キャッシュ対象にする

controllerでキャッシュのポリシー(expires_in)を設定する

app/controllers/users_controller.rb
class UsersController < ApplicationController
  def index
    @users = User.all
    # キャッシュの期間と共有を有効化
    expires_in 1.hour, public: true
  end
end

キャッシュが有効化されたことを確認

Railsのレスポンスヘッダにcache-control: max-age=3600, publicが付与され、CloudFrontのキャッシュ対象(x-cache: Hit from cloudfront)になった

curl -i https://xxxxx.cloudfront.net/users.json
HTTP/2 200
...
cache-control: max-age=3600, public
...
x-cache: Hit from cloudfront
...

参考

Railsのキャッシュについて以下の投稿を参考にさせていただきました。
Rails でブラウザのキャッシュを利用する - Qiita

3
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
6