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

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

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

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

使い方のおさらい

カラムを追加して

  class AddAvatarColumnsToUser < ActiveRecord::Migration
    def self.up
      add_column :users, :avatar_file_name,    :string
      add_column :users, :avatar_content_type, :string
      add_column :users, :avatar_file_size,    :integer
      add_column :users, :avatar_updated_at,   :datetime
    end

    def self.down
      remove_column :users, :avatar_file_name
      remove_column :users, :avatar_content_type
      remove_column :users, :avatar_file_size
      remove_column :users, :avatar_updated_at
    end
  end

モデルクラスで定義

class User < ActiveRecord::Base
    has_attached_file :avatar
end

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

Amazon S3を使う

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

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

config/s3.ymlには

access_key_id: 456...
secret_access_key: 456...

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

productionでだけS3を使いたい

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

  has_attached_file :avatar, Proc.new {
    if RAILS_ENV == 'production'
      {
        :storage => :s3,
        :s3_credentials => "#{RAILS_ROOT}/config/s3.yml",
        :path => ":attachment/:id/:style.:extension",
        :bucket => 'mybucket'
      }
    else
      {}
    end
  }.call

こんな感じでいいかな

関連記事

  1. [rails] restful-authenticationの使い方 基本編
  2. [rails] map.resourcesでいらないアクションを外す
  3. [rails] ユーザーのパスワード忘れ処理を簡単に生成してくれるプラグインforgot_password ( with Restful-authentication)
  4. Rails 2.3のApplication Templateで煩わしい初期設定とはおさらばする!
  5. 毎日読むRails boot.rb その2
Posted in ruby, ruby on rails at 9月 9th, 2009. Trackback URI: trackback
Tags: ,

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

Leave a Reply