Amazon CloudFrontはAmazon S3上のファイルをキャッシュするソリューションです。
前回paperclipからS3を使う設定はわかったので、今回はさらにCloudFrontを利用するための設定です
前回のおさらい
- has_attached_file :avatar,
- :storage => :s3,
- :s3_credentials => "#{RAILS_ROOT}/config/s3.yml",
- :path => ":attachment/:id/:style.:extension",
- :bucket => 'mybucket'
前回こんな感じでS3の設定をしました。
コンソールから利用してみると
- user = User.new
- user.avatar = File.open('/tmp/myface.jpg')
- user.save
- puts user.avatar.url #=> http://mybucket.s3.amazonaws.com/avatar/1/original.jpg
こんな感じでS3のURLがとれるようになっているはず。
s3_host_aliasを効かす
キャッシュサービスであるCloudFrontを利用する場合は、ホスト名を適宜変えるだけなので paperclipが勝手にやってくれるといいなぁ〜なんて思いました。
- has_attached_file :avatar,
- :storage => :s3,
- :s3_credentials => "#{RAILS_ROOT}/config/s3.yml",
- :path => ":attachment/:id/:style.:extension",
- :bucket => 'mybucket',
- :s3_host_alias => "xxxxxxxxxxxx.cloudfront.net",
- :url => ":s3_alias_url"
オプションが2つ増えてます
- :s3_host_alias は、エイリアスのFQDNを記述しておきます。
- :url には「":s3_alias_url"」を記述します。注意なのは、rubyのシンボルじゃなくて、文字列だってところです。ハマりました。
- user = User.new
- user.avatar = File.open('/tmp/myface.jpg')
- user.save
- puts user.avatar.url #=> http://xxxxxxxxxxxx.cloudfront.net/avatar/1/original.jpg
わーーこりゃ幸せだ。
余談
さらにサイト全体でアセット関係(public以下)もCloudFrontにしたければ
config/environments/#{RAILS_ENV}.rb 内で
- config.action_controller.asset_host = "http://xxxxxxxxxxxx.cloudfront.net"
こうしとけば、image_path()やらimage_tag()やらjavascript_include_tag()やらを使ったときに、リクエスト先を書き換えてくれてさらに幸せ度アップ