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に影響が出ちゃうので注意する)