[rails] paperclipでAmazon CloudFrontを使う

このエントリーを含むはてなブックマーク

Amazon CloudFrontはAmazon S3上のファイルをキャッシュするソリューションです。

前回paperclipからS3を使う設定はわかったので、今回はさらにCloudFrontを利用するための設定です

前回のおさらい

  1. has_attached_file :avatar,
  2.   :storage => :s3,
  3.   :s3_credentials => "#{RAILS_ROOT}/config/s3.yml",
  4.   :path => ":attachment/:id/:style.:extension",
  5.   :bucket => 'mybucket'


前回こんな感じでS3の設定をしました。

コンソールから利用してみると

  1. user = User.new
  2. user.avatar = File.open('/tmp/myface.jpg')
  3. user.save
  4.  
  5. puts user.avatar.url #=> http://mybucket.s3.amazonaws.com/avatar/1/original.jpg


こんな感じでS3のURLがとれるようになっているはず。

s3_host_aliasを効かす

キャッシュサービスであるCloudFrontを利用する場合は、ホスト名を適宜変えるだけなので paperclipが勝手にやってくれるといいなぁ〜なんて思いました。

  1. has_attached_file :avatar,
  2.   :storage => :s3,
  3.   :s3_credentials => "#{RAILS_ROOT}/config/s3.yml",
  4.   :path => ":attachment/:id/:style.:extension",
  5.   :bucket => 'mybucket',
  6.   :s3_host_alias => "xxxxxxxxxxxx.cloudfront.net",
  7.   :url => ":s3_alias_url"


オプションが2つ増えてます

  • :s3_host_alias は、エイリアスのFQDNを記述しておきます。
  • :url には「":s3_alias_url"」を記述します。注意なのは、rubyのシンボルじゃなくて、文字列だってところです。ハマりました。
  1. user = User.new
  2. user.avatar = File.open('/tmp/myface.jpg')
  3. user.save
  4.  
  5. puts user.avatar.url #=> http://xxxxxxxxxxxx.cloudfront.net/avatar/1/original.jpg


わーーこりゃ幸せだ。

余談

さらにサイト全体でアセット関係(public以下)もCloudFrontにしたければ

config/environments/#{RAILS_ENV}.rb 内で

  1. config.action_controller.asset_host = "http://xxxxxxxxxxxx.cloudfront.net"


こうしとけば、image_path()やらimage_tag()やらjavascript_include_tag()やらを使ったときに、リクエスト先を書き換えてくれてさらに幸せ度アップ

Posted in ruby, ruby on rails at 9月 10th, 2009. Trackback URI: trackback
Tags: , ,

No Responses to “[rails] paperclipでAmazon CloudFrontを使う”

Leave a Reply