[Rails] PaperClipを使って本番の時だけAmazon S3を使う

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

PaperClipはとってもシンプルなActiveRecordで添付ファイルを管理するプラグインです。

http://github.com/thoughtbot/paperclip/tree/master

便利すぎて鼻血がでそうなプラグインです

使い方のおさらい

カラムを追加して

  1. class AddAvatarColumnsToUser <ActiveRecord::Migration
  2.     def self.up
  3.       add_column :users, :avatar_file_name,    :string
  4.       add_column :users, :avatar_content_type, :string
  5.       add_column :users, :avatar_file_size,    :integer
  6.       add_column :users, :avatar_updated_at,   :datetime
  7.     end
  8.  
  9.     def self.down
  10.       remove_column :users, :avatar_file_name
  11.       remove_column :users, :avatar_content_type
  12.       remove_column :users, :avatar_file_size
  13.       remove_column :users, :avatar_updated_at
  14.     end
  15.   end


モデルクラスで定義

  1. class User <ActiveRecord::Base
  2.     has_attached_file :avatar
  3. end


とするだけですね。 詳細はRDocをみてください

Amazon S3を使う

PaperClipはストレージにS3を使うためのオプションがあります

  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'


config/s3.ymlには

  1. access_key_id: 456...
  2. secret_access_key: 456...


こんな感じのアクセスキーとシークレットキーを置いておきます

productionでだけS3を使いたい

開発中はローカルで完結したい場合は

  1. has_attached_file :avatar, Proc.new {
  2.     if RAILS_ENV == 'production'
  3.       {
  4.         :storage => :s3,
  5.         :s3_credentials => "#{RAILS_ROOT}/config/s3.yml",
  6.         :path => ":attachment/:id/:style.:extension",
  7.         :bucket => 'mybucket'
  8.       }
  9.     else
  10.       {}
  11.     end
  12.   }.call


こんな感じでいいかな

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

No Responses to “[Rails] PaperClipを使って本番の時だけAmazon S3を使う”

Leave a Reply