paperclipで画像をアップロードしてた場合、S3に移行するのは簡単。paperclipはDB内にファイルのパスを持ってるわけじゃないので、サーバーファイルシステム上の画像を全部S3にコピーした上でアプリの設定を変えれば良い。

# Gemfile:
gem 'paperclip'
gem 'aws-s3'
gem 'aws-sdk'
# config/initializers/paperlicp.rb:
if Rails.env.production?       
  Paperclip::Attachment.default_options.update(
    storage: :s3,              
    s3_credentials: "#{Rails.root}/config/s3.yml",
    s3_host_alias: Settings.cdn_host,
    path: ":class/:id/:attachment/:style",
    url: ':s3_alias_url'
  )   
end
# config/s3.yml:
production:
  bucket: kowabana-jp
  access_key_id: xxx
  secret_access_key: xxx
  s3_host_name: s3-ap-northeast-1.amazonaws.com

development:
  bucket: bucket_name
  access_key_id: xxx
  secret_access_key: xxx
  s3_host_name: s3-ap-northeast-1.amazonaws.com

test:
  bucket: bucket_name
  access_key_id: xxx
  secret_access_key: xxx
  s3_host_name: s3-ap-northeast-1.amazonaws.com

modelのhas_attached_fileに渡すオプションが環境毎に違ってたりする場合はinitializers以下に書いた方がスッキリする。productionでだけS3(ここではCloudFrontを使うのもの一緒にやってます)にする場合は上記。(staging環境で何か動かす時にもS3に影響が出ちゃうので注意する)

Comments


(Option)