###やりたいこと
herokuにデプロイしたアプリで画像を保存し、その画像をS3に保存したい。
###環境
cloud9
ruby 2.6.3
Rails 5.2.6
carrierwave 1.3.2
fog-aws 3.10.0
###エラー
元々デプロイはできていて画像の投稿も行えていたのですが、その画像がうまくS3に保存できていなかったので、もう一度初めからS3の設定を行っていました。しかし、その途中でエラーが多発し、gem 'fog-aws'を入れたり、コードを追記したりしました。その後、再デプロイしたところ、画像を投稿するときに
We're sorry, but something went wrong. If you are the application owner check the logs for more information.
と出たので、heroku logs -tで確認したところ、エラーに関係ありそうなところで
2021-06-08T00:58:25.668800+00:00 app[web.1]: D, [2021-06-08T00:58:25.668668 #4] DEBUG -- : [a54bb32d-dd5a-4891-b8d4-5760d439771d] (3.4ms) ROLLBACK 2021-06-08T00:58:25.669480+00:00 app[web.1]: I, [2021-06-08T00:58:25.669405 #4] INFO -- : [a54bb32d-dd5a-4891-b8d4-5760d439771d] Completed 500 Internal Server Error in 3579ms (ActiveRecord: 9.7ms) 2021-06-08T00:58:25.671363+00:00 app[web.1]: F, [2021-06-08T00:58:25.671292 #4] FATAL -- : [a54bb32d-dd5a-4891-b8d4-5760d439771d] 2021-06-08T00:58:25.671493+00:00 app[web.1]: F, [2021-06-08T00:58:25.671429 #4] FATAL -- : [a54bb32d-dd5a-4891-b8d4-5760d439771d] Excon::Error::Socket (Broken pipe (Errno::EPIPE)): 2021-06-08T00:58:25.671676+00:00 app[web.1]: F, [2021-06-08T00:58:25.671594 #4] FATAL -- : [a54bb32d-dd5a-4891-b8d4-5760d439771d] 2021-06-08T00:58:25.671676+00:00 app[web.1]: F, [2021-06-08T00:58:25.671594 #4] FATAL -- : [a54bb32d-dd5a-4891-b8d4-5760d439771d] 2021-06-08T00:58:25.672028+00:00 app[web.1]: F, [2021-06-08T00:58:25.671966 #4] FATAL -- : [a54bb32d-dd5a-4891-b8d4-5760d439771d] app/controllers/posts_controller.rb:14:in `create'
と出ました。
最後の行でapp/controllers/posts_controller.rb:14:in `create'と出ていたので確認してみると
def create @post = Post.new(post_params) if @post.save flash[:notice] = "投稿しました" redirect_to("/posts/index") else flash[:notice] = "必須項目を満たしてください" render("posts/new") end end
if @post.saveのところが14行目でした。
恐らく保存するときにS3関連で問題が発生しているのだと思うのですが、原因がわかりません。
###S3再設定時に行ったこと
#####1、
config/environments/production.rbに、config.active_storage.service = :amazon
と書くところをconfig/environments/development.rbに記述してしまっていたので修正。
#####2、
最初はgem 'fog'を入れていたが、代わりにgem 'fog-aws'を入れた。
#####3、
config/environments/carrierwave.rbに
if Rails.env.production? CarrierWave.configure do |config| config.fog_provider = 'fog/aws' config.fog_credentials = { :provider => 'AWS', :region => ENV['S3_REGION'], :aws_access_key_id => ENV['S3_ACCESS_KEY'], :aws_secret_access_key => ENV['S3_SECRET_KEY'] } config.fog_directory = ENV['S3_BUCKET'] end end
とあったので、.envにS3_REGION、S3_ACCESS_KEY、S3_SECRET_KEYを=でそれぞれ記述。
(後にconfig.fog_provider = 'fog/aws'とconfig.fog_credentials = {の間に、config.fog_public = trueを追記。)
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。