#筆者の環境
Ruby 2.5.3
Rails 5.2.4.2
gem: fog-aws
Railsで画像投稿にCarrierWaveを導入したのですが、gem:fog-awsを利用していて多くエラーに遭遇したので、恐らくこれから導入される方は苦労すると思い、設定を残しておこうと思いました。
同じ環境であれば、carrierwave.rbについては下記の設定ファイルでOKなはずです。
#carrierwave.rbの設定
require 'carrierwave/storage/abstract'
require 'carrierwave/storage/file'
require 'carrierwave/storage/fog'
CarrierWave.configure do |config|
if Rails.env.development? || Rails.env.test?
config.storage = :file
config.enable_processing = false if Rails.env.test?
elsif Rails.env.production?
config.fog_provider = 'fog/aws'
config.fog_credentials = {
provider: 'AWS',
aws_access_key_id: ENV["AWS_ACCESS_KEY_ID"],
aws_secret_access_key: ENV["AWS_SECRET_ACCESS_KEY"],
region: 'ap-northeast-1'
}
config.storage = :fog
config.fog_directory = 'あなたのS3のバケット名'
config.asset_host = 'https://s3.ap-northeast-1.amazonaws.com/あなたのS3バケット名'
end
end
CarrierWave::SanitizedFile.sanitize_regexp = /[^[:word:]\.\-\+]/
##ポイント
・本番環境のみAWS S3で画像を保持するようになっています。開発環境はローカルに保存されます。
・carrierwave.rbの保管ディレクトリは注意してください。app/config/initializers/carrierwave.rbです。
CarrierWave::SanitizedFile.sanitize_regexp = /[^[:word:]\.\-\+]/
最下部のこのコードですが、デフォルトだとcarrierwaveはファイル名に日本語が使えない為、使えるようにする一文です。文字化けを防ぐことができます。
aws_access_key_id: ENV["AWS_ACCESS_KEY_ID"],
aws_secret_access_key: ENV["AWS_SECRET_ACCESS_KEY"]
については、.envファイルで環境変数を指定してください。
#AWS S3の設定
S3の設定も色々と苦労したので、スクリーンショットで残しておきたいと思います。
S3の自分のバケットのプロパティです。ログ記録のみ有効にしてあります。ちなみにこの下の詳細設定も全て無効です。
ブロックパブリックアクセスです。下部2つのみオンにしてあります。
バケットポリシーエディターです。各自バケット名など変更してください。
コピーできるように下にコードを載せておきます。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Stmt000001",
"Effect": "Allow",
"Principal": {
"AWS": "あなたのユーザーのARN(IAMから確認)"
},
"Action": "s3*",
"Resource": "arn:aws:s3:::あなたのS3バケット名"
}
]
}
その他の項目は設定していません。
#CarrierWaveの所感
CarrierWaveは画像リサイズなど便利ですが、AWS EC2へデプロイし、S3を使用するとなると少し大変でした。
ActiveStorageも勉強したいと思います。
少しでも誰かの助けの記事になれば幸いです!