2010/01/04

Paperclip と Amazon S3 でファイルを保存する

オンラインショップのサーバー要領がちょっとキツクなったので、画像データを Amazon S3 を使って保存してみょーと思い立つ。
ざっくり説明しますと、Amazon S3が外部ストーレージサービス。データをやり取りした分だけ課金されます。1GBで15円ほどなので、安くは無いけど、いろんなメリットを考えると高くもない。とりあえずテストしてみることに決定~。

まず、Amazon S3 に登録

S3 のデータを見るには『S3Fox』が便利

Firefox のプラグイン『S3Fox』を使うと、FTPクライアント風にAmazon S3の中がみれるよ。

Paperclip 設定の変更

以前、Paperclip の使い方についてメモりましたが、そこからちょいと手を加えます。 environment.rb に aws gem を追加
config.gem "aws-s3", :lib => "aws/s3"
(require する際に require = "aws/s3" とする場合は上のように、 :lib => "aws/s3" を加えて記述) この後、rake gems:install を実行するのを忘れずに。 config/s3.yml を作成
access_key_id: ABCD...
secret_access_key: xYz...
キーとシークレットはここから。 モデルの変更
 #通常バージョン
 has_attached_file :image,
   :styles => {:s => "150x150>", :m =>"320x320>", :l => "500x500>"},
   :url  => "/assets/products/:id/p_:style.:basename.:extension",
   :path => ":rails_root/public/assets/products/:id/p_:style.:basename.:extension"

 #↓S3 バージョン
 has_attached_file :image,
   :styles => {:s => "150x150>", :m =>"320x320>", :l => "500x500>"},
   :storage => :s3,
   :s3_credentials => "#{RAILS_ROOT}/config/s3.yml",
   :path => "products/:id/:style.:extension",
   :url  => ":s3_domain_url",
   :bucket => S3_BUCKET #S3_BUCKET は production/environment.rb development/environment.rb で定義

:s3_domain_url だと http://mybucket.s3.amazonaws.com/products/16152/l.jpg のようになる。
因みに、上で指定した bucket をあらかじめ作っておく必要があるのですー↓ この場合、S3Fox で作成。 これで準備はOK。さっそくアップロードしてみると。。。 入ってる!感激~

0 件のコメント: