LoginSignup
0
0

【Rails/heroku】pushしたらH10でアプリがクラッシュしたので対処する

Posted at

herokuで作成したアプリにデプロイするために

git push heroku branch_name:main

#pushできたのを確認後
heroku open

したところエラーが発生しました。heroku_app_crush.jpg

https://devcenter.heroku.com/ja/articles/error-codes#h10-app-crashed

code=H10エラー

何かが原因でデプロイ先のアプリがクラッシュしたみたいです。

原因を探るには最初にheroku CLIを使用したログから原因を探していく必要がありそうです。

怪しい箇所はどこか

/app/vendor/bundle/ruby/3.2.0/gems/bootsnap-1.16.0/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb

僕の環境で表示されたログのうち、エラーの1行前に表示されたものが一番気になります。

直前に行ったことといえば

docker のGemfileの中にamazon S3用にgemを追加しておりました。

それまではlocalhostへアクセスしても問題なく表示できていたのにローカルを確認したところ

ローカルのコンテナも起動してない事実が発覚。

NAME                IMAGE                   COMMAND                  SERVICE             CREATED             STATUS                      PORTS
rails_ec-css-1      rails_template:latest   "entrypoint.sh yarn …"   css                 46 seconds ago      Up 43 seconds               3000/tcp
rails_ec-db-1       postgres:14-alpine      "docker-entrypoint.s…"   db                  46 seconds ago      Up 44 seconds               5432/tcp
rails_ec-js-1       rails_template:latest   "entrypoint.sh yarn …"   js                  46 seconds ago      Up 43 seconds               3000/tcp
rails_ec-web-1      rails_template:latest   "entrypoint.sh bundl…"   web                 45 seconds ago      Exited (1) 40 seconds ago

Gemfileが怪しい?

dockerのlogを確認する

コンテナが起動していないのが気になる。

なのでdockerのログを確認します。

docker logs rails_ec-web-1
bundler: failed to load command: rails (/usr/local/bundle/bin/rails)
/usr/local/bundle/gems/bundler-2.4.19/lib/bundler/definition.rb:540:in `materialize': Could not find aws-sdk-s3-1.136.0, aws-sdk-core-3.185.1, aws-sdk-kms-1.72.0, aws-sigv4-1.6.0, aws-eventstream-1.2.0, aws-partitions-1.834.0, jmespath-1.6.2 in locally installed gems (Bundler::GemNotFound)
	from /usr/local/bundle/gems/bundler-2.4.19/lib/bundler/definition.rb:200:in `specs'
	from /usr/local/bundle/gems/bundler-2.4.19/lib/bundler/definition.rb:266:in `specs_for'
	from /usr/local/bundle/gems/bundler-2.4.19/lib/bundler/runtime.rb:18:in `setup'
	from /usr/local/bundle/gems/bundler-2.4.19/lib/bundler.rb:162:in `setup'
	from /usr/local/bundle/gems/bundler-2.4.19/lib/bundler/setup.rb:23:in `block in <top (required)>'
	from /usr/local/bundle/gems/bundler-2.4.19/lib/bundler/ui/shell.rb:159:in `with_level'
	from /usr/local/bundle/gems/bundler-2.4.19/lib/bundler/ui/shell.rb:111:in `silence'
	from /usr/local/bundle/gems/bundler-2.4.19/lib/bundler/setup.rb:23:in `<top (required)>'
	from /usr/local/bundle/gems/bundler-2.4.19/lib/bundler/cli/exec.rb:56:in `require_relative'
	from /usr/local/bundle/gems/bundler-2.4.19/lib/bundler/cli/exec.rb:56:in `kernel_load'
	from /usr/local/bundle/gems/bundler-2.4.19/lib/bundler/cli/exec.rb:23:in `run'
	from /usr/local/bundle/gems/bundler-2.4.19/lib/bundler/cli.rb:492:in `exec'
	from /usr/local/bundle/gems/bundler-2.4.19/lib/bundler/vendor/thor/lib/thor/command.rb:27:in `run'
	from /usr/local/bundle/gems/bundler-2.4.19/lib/bundler/vendor/thor/lib/thor/invocation.rb:127:in `invoke_command'
	from /usr/local/bundle/gems/bundler-2.4.19/lib/bundler/vendor/thor/lib/thor.rb:392:in `dispatch'
	from /usr/local/bundle/gems/bundler-2.4.19/lib/bundler/cli.rb:34:in `dispatch'
	from /usr/local/bundle/gems/bundler-2.4.19/lib/bundler/vendor/thor/lib/thor/base.rb:485:in `start'
	from /usr/local/bundle/gems/bundler-2.4.19/lib/bundler/cli.rb:28:in `start'
	from /usr/local/bundle/gems/bundler-2.4.19/exe/bundle:37:in `block in <top (required)>'
	from /usr/local/bundle/gems/bundler-2.4.19/lib/bundler/friendly_errors.rb:117:in `with_friendly_errors'
	from /usr/local/bundle/gems/bundler-2.4.19/exe/bundle:29:in `<top (required)>'
	from /usr/local/bundle/bin/bundle:25:in `load'
	from /usr/local/bundle/bin/bundle:25:in `<main>'

`materialize': Could not find

英語版のエンジニアの掲示板に同じ様な記述があります。

https://stackoverflow.com/questions/68867835/materialize-could-not-find

ここに書かれてある質問で

この問題は環境変数に関連しており、gem の正しいパスを見つけることができないことでした。

つまり、`materialize': Could not find は『〇〇のGemの正しいパスを見つけることができなかった』と考えられます。

エラー内容を見てみると

`materialize': Could not find aws-sdk-s3-1.136.0, aws-sdk-core-3.185.1, aws-sdk-kms-1.72.0, aws-sigv4-1.6.0, aws-eventstream-1.2.0, aws-partitions-1.834.0, jmespath-1.6.2 in locally installed gems (Bundler::GemNotFound)

最後の方にGemnotFoundと書かれてありますので、Gemが問題となっている感じ。

aws s3の設定について振り返る

現在のGemにはS3が使える用にGemを追加してあります。

group :production do
  gem 'aws-sdk-s3'
end

ここを追加してからdockerのコンテナが上手く起動しなくなった感じがする。

Activestorageの公式リファレンスを確認してみるとS3についてGithubのリンクが貼られていました。

https://github.com/aws/aws-sdk-ruby

V3以降はGemのバージョン指定が必要?

Google翻訳でページを翻訳してみると

AWS SDK for Ruby は RubyGems から入手できます。V3 モジュール化では、インストールする特定の AWS サービス gem を選択する必要があります。

V3からのことを記述している?みたいなので、バージョンを指定して再度実行してみます。

※正直深い意味は不明。

エラー分に書かれてある

aws-sdk-s3-1.136.0

これはaws-sdk-sの3現在の最新のバージョンの様です。

https://rubygems.org/gems/aws-sdk-s3/versions/1.2.0?locale=ja

group :production do
  gem 'aws-sdk-s3', '~> 1.2'
end

内容を変更しました。

以下は行った一連の流れです。

  1. docker compose build
    1. 正常にイメージは再作成できたものの、その後docker compose up -dでコンテナが立ち上がらない
    2. docker compose run web bundle installを実行
    3. docker compose ps -a でwebコンテナが複数できてしまっていることを確認
    4. docker compose downでコンテナを削除
      1. 一部削除できなかったためdocker compose killを行うもしぶとくwebコンテナが複数残る
      2. docker rm コンテナIDで細々と削除
      3. コンテナを一度クリーンな状態へ持って行った
  2. docker compose up -d
  3. docker compose ps -aで起動の確認
    1. localhost:3000へアクセスし表示の確認に成功 

ここまでは上手くいけました。

git push heroku branch_name:main しかし・・・

無事herokuへpushはできたけど、

念のためheroku openする前にlogの確認を行ったところエラー・・・。

heroku logs --tail
2023-10-12T14:32:57.434280+00:00 app[web.1]: from bin/rails:4:in `<main>'
2023-10-12T14:32:57.556535+00:00 heroku[web.1]: Process exited with status 1
2023-10-12T14:32:57.578855+00:00 heroku[web.1]: State changed from starting to crashed
2023-10-12T14:32:57.582938+00:00 heroku[web.1]: State changed from crashed to starting
2023-10-12T14:33:00.638967+00:00 heroku[web.1]: Starting process with command `bin/rails server -p ${PORT:-5000} -e production`
2023-10-12T14:33:02.397798+00:00 app[web.1]: => Booting Puma
2023-10-12T14:33:02.397829+00:00 app[web.1]: => Rails 7.0.7.2 application starting in production
2023-10-12T14:33:02.397830+00:00 app[web.1]: => Run `bin/rails server --help` for more startup options
2023-10-12T14:33:02.908063+00:00 app[web.1]: Exiting
2023-10-12T14:33:02.908684+00:00 app[web.1]: /app/vendor/bundle/ruby/3.2.0/gems/aws-sdk-core-3.185.1/lib/aws-sdk-core/plugins/regional_endpoint.rb:69:in `after_initialize': No region was provided. Configure the `:region` option or export the region name to ENV['AWS_REGION'] (Aws::Errors::MissingRegionError)
2023-10-12T14:33:02.908685+00:00 app[web.1]:
2023-10-12T14:33:02.908686+00:00 app[web.1]: raise Errors::MissingRegionError
2023-10-12T14:33:02.908686+00:00 app[web.1]: ^^^^^^^^^^^^^^^^^^^^^^^^^^

AWSの設定が間違っているor読み込めていない。

AWSの環境変数の読み込みができていない?

storage.ymlにもともとS3に関連した設定がコメントアウトされていました。

それを元に設定を行ってましたがうまく.環境変数の読み込みができていない様子です。

コメントアウトを解除してS3の設定を

credentials.yml.encへ記述してherokuへpushしたけどアプリがクラッシュ

原因はここにあった可能性が高いと判断

※助言を他の方からもいただきました。

storage.ymlへ直書き

S3の設定内容をcredentials.yml.encへ記述したけど

それをstorage.ymlへ直接記述する方向へ変更

変更分をリポジトリへpushした後、herokuへもpush。

#heroku openする前にlogを見ておく
heroku logs --tail

#今度は crushの文字がなかったぞ!?ってことで確認しに行く
heroku open

スクリーンショット 2023-10-20 0.50.01.png

かわらずエラー画面ですが、

アプリがクラッシュすることは免れました。

また今表示しているエラー画面の原因もわかったので、

そちらについては別記事でまとめようと思います。

credentials.yml.encに設定すると詰んだ

storage.ymlに直接書くとherokuアプリがクラッシュすることはありませんでした。

設定の仕方が間違っていた可能性もありますが、ひとまず個人開発なのでこれでもよし。

credentials.yml.encに記載した内容が反映されなかったときはstorage.ymlへ直接書けば解決できる。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0