miu-P
@miu-P (Daiki Miura)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

Railsチュートリアル 第13章画像投稿機能 本番環境でのエラー

解決したいこと

初投稿のため至らぬところも多々あるかと思いますが、以下ご教示いただきたくお願いいたします。

Railsチュートリアルの第13章、画像投稿機能実装後にherokuへデプロイをしたのですが、アプリがクラッシュしているようでエラー画面が出てきます。
開発環境では正常に動いており、テストもパスしてますので、本番環境のみのエラーだと思います。

Rails学習中であり、Progateで一通り勉強したのちにチュートリアルをコツコツ進めてきました。今までもなんとかエラー文をググったりしてエラーは乗り越えてきたのですが、今回は糸口が掴めず皆様に知恵をお貸しいただこうと思い投稿に至りました。

発生している問題・エラー

herokuでの本番環境のアプリがクラッシュしており、エラー画面が表示されます。

・heroku logs --tailの実行結果

buntu:~/environment/sample_app (user-microposts) $ heroku logs --tail
2022-05-17T22:48:15.881693+00:00 app[web.1]: from /app/vendor/bundle/ruby/3.0.0/gems/bundler-2.3.10/lib/bundler/cli.rb:25:in `start'
〜中略〜
/app/vendor/bundle/ruby/3.0.0/gems/bundler-2.3.10/exe/bundle:36:in `<top (required)>'
2022-05-17T22:48:15.889692+00:00 app[web.1]: from /app/bin/bundle:113:in `load'
2022-05-17T22:48:15.889700+00:00 app[web.1]: from /app/bin/bundle:113:in `<main>'
2022-05-17T22:48:16.008327+00:00 heroku[web.1]: Process exited with status 1
2022-05-17T22:48:16.073437+00:00 heroku[web.1]: State changed from starting to crashed

・heroku run rails consoleの実行結果

ubuntu:~/environment/sample_app (user-microposts) $ heroku run rails console
 ›   Warning: heroku update available from 7.60.1 to 7.60.2.
Running rails console on ⬢ <※アプリ名が入ってます>... up, run.3990 (Free)
/app/vendor/bundle/ruby/3.0.0/gems/activestorage-6.0.4/lib/active_storage/service/configurator.rb:31:in `rescue in resolve': Cannot load `Rails.config.active_storage.service`: (RuntimeError)
Missing service adapter for "S3"
(〜中略〜)
/app/vendor/bundle/ruby/3.0.0/gems/bootsnap-1.10.3/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:27:in `require': cannot load such file -- webrick/httputils (LoadError)
・・・

自分で試したこと

エラー文で検索しましたが、ピンポイントでヒットする内容はなさそうでした。
ヒントや怪しい箇所などあればご教示いただけますと幸いです。

本番環境だけでのエラーなので、AWSのS3の設定周りでうまくいってないのかなと推測しています。
何卒よろしくお願いいたします。

<試したこと>
・migrateとseedを再度実行
・run rails consoleでエラー内容確認、ググるもわからず
・heroku restartの実行
・herokuのアクセスキーなどの確認:うまく設定されてないのかなど思いherokuのsettingから確認するもちゃんと設定されていそう
・Gemの変更:チュートリアルの途中で追加したgem 'aws-sdk-s3'のバージョンが'1.46.0'であったのを'1.48.0'に変更(記事でバージョン違いが影響しているのかもという内容があった)

#
source 'https://rubygems.org'
git_source(:github) { |repo| "https://github.com/#{repo}.git" }

gem 'rails',                   '6.0.4'
gem 'aws-sdk-s3',              '1.46.0', require: false #追加
gem 'image_processing',        '1.9.3'
gem 'mini_magick',             '4.9.5'
.
.
.

・storage.ymlのストレージオプションでENV変数を使ったところが上手くできていないのかと思い、直接キーを書き込んでみた(本来避けるべきなのは承知しております)

test:
  service: Disk
  root: <%= Rails.root.join("tmp/storage") %>

local:
  service: Disk
  root: <%= Rails.root.join("storage") %>

amazon:
  service: S3
  access_key_id:     <%= ENV['AWS_ACCESS_KEY'] %> #ここのENV以下を直接書く
  secret_access_key: <%= ENV['AWS_SECRET_KEY'] %> #ここのENV以下を直接書く
  region:            <%= ENV['AWS_REGION'] %> #ここのENV以下を直接書く
  bucket:            <%= ENV['AWS_BUCKET'] %> #ここのENV以下を直接書く
0

2Answer

Comments

  1. @miu-P

    Questioner

    ご回答ありがとうございます。

    ご返信遅くなり申し訳ございません。恐れ入りますが、config/environment/development.rbのどのあたりが問題となっていそうか、ご教示いただけないでしょうか...?

    現状問題が起きているのが本番環境だけであるため、何か原因があるとすればconfig/environment/production.rbの方ではないかと思っております。

    (ちなみに現在の環境でdockerは使用しておりません。)
  2. すみません、間違えました。
    config/environment/production.rbの方ですね!
    その中のconfig.active_storage.serviceが原因なんじゃないかと思います。

    エラーメッセージにも出てますし
  3. @miu-P

    Questioner

    度々ご返信ありがとうございます^^

    本件解決いたしましたので、クローズさせていただきます。
    (config/environment/production.rbは問題なさそうでしたが、gemの周りで不都合があったようです。)

    初投稿で少し不安もありましたが寄り添っていただき非常に心強かったです。また機会がありましたら宜しくお願いいたします!

こちら、解決いたしました。
正直なぜエラーとなっていたのかよくわかりませんが、以下の方法で治りました。

・heroku run rails consoleをする
can't activate aws-sdk-s3 (~> 1.48), already activated aws-sdk-s3-1.46.0. Make sure all dependencies are added to Gemfile. (Gem::LoadError)

とあったので、こちらの記事を参考に対応。
https://stackoverflow.com/questions/71642902/ruby-on-rails-6-gemloaderror-on-aws-sdk-s3-gem/72006959#72006959

もう一度アプリをみるとまだクラッシュしてエラーになっていましたが、エラー内容が変わりました。

cannot load such file -- webrick/httputils (LoadError)

ググるとこちらの記事を見つけましたので、"bundle add webrick"をして対応。
https://stackoverflow.com/questions/65617143/cannot-load-such-file-webrick-httputils

するとエラーがなくなり本番環境が無事動作しました。

Cannot load Rails.config.active_storage.service: (RuntimeError)
Missing service adapter for "S3"
がなぜ出たのか、またなぜ上記対応で解決したのかはまだわかりません。
もし知見のある方がいらっしゃれば、ご教示いただけますと幸いです。

0Like

Your answer might help someone💌