carrierwaveでS3にアップロード
やること
- AWSのIAMで「S3FullAccess」の権限を持ったユーザを作成し、アクセスキーを作成する(アクセスキー・シークレットアクセスキーは控えておく)
- S3バケットを作成する。このときACLは無効に設定しておく
- rails/config/initializers/carrierwave.rbを以下のように編集
CarrierWave.configure do |config|
config.storage = :fog
config.fog_provider = 'fog/aws'
config.fog_credentials = {
provider: 'AWS',
aws_access_key_id: '[作成したアクセスキー]',
aws_secret_access_key: '[シークレットアクセスキー]',
region: '[S3のリージョン]'
}
config.fog_directory = '[作成したバケット名]'
config.cache_storage = :fog
config.fog_public = false
end
config.fog_public = false を追記していないと、
アプリで画像をアップロードしようとしても「The bucket does not allow ACLs」というエラーが出て失敗するので注意。
アクセスキーなどは環境変数にしておく
(間違ってもgithubなどにアップロードしてはいけない)
production環境ではS3に、develop環境ではローカル(/upload配下)にアップロードするようにした。