Rails + Heroku + CarrierWave + S3 で、画像をアップロードしても、本番環境では画像が正しく表示されなかったので、その対処した時のメモを残したいと思います。
アップロード自体の方法はこちらの記事をご覧ください。
エラー内容
ブラウザで見るとこのようになって、正常に表示されません。
Amazon S3の管理画面で確認すると、問題なくアップロードはされていました。
対処内容
原因はconfig/initializers/carrierwave.rb内の、urlの指定が間違っていたからでした。以下のように asset_hostのurlの指定を修正すると、無事にストレージから画像を取得できました。そもそも、fog_directoryだけでも、画像の表示はできるようなので、asset_hostの1行を削除しても、問題ありませんでした。
config/initializers/carrierwave.rb
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
require 'carrierwave/storage/abstract' require 'carrierwave/storage/file' require 'carrierwave/storage/fog' CarrierWave.configure do |config| if Rails.env.production? config.storage :fog config.fog_provider = 'fog/aws' config.fog_directory = 'バケット名' - config.asset_host = 'https://s3.amazonaws.com/バケット名' #url間違い + config.asset_host = 'https://バケット名.s3.amazonaws.com' #このように修正、もしくはこの行を削除 config.fog_credentials = { provider: 'AWS', aws_access_key_id: ENV['AWS_ACCESS_KEY_ID'], aws_secret_access_key: ENV['AWS_SECRET_ACCESS_KEY'], region: ENV['AWS_REGION'], path_style: true } else config.storage :file config.enable_processing = false if Rails.env.test? end end CarrierWave::SanitizedFile.sanitize_regexp = /[^[:word:]\.\-\+]/ |
以上です!どなたかの参考になれば幸いです!
ありがとうございました!☺️