【デイトラ DAY26】heroku logs –tailを実行すると、bundler: failed to load command: pumaのエラーが出た時の対処

今回はHerokuへデプロイした後に、アプリケーションを立ち上げると下画像のようにエラーが出ました。

エラーが出るまでの流れ
  1. Herokuへデプロイ成功
  2. アプリケーションエラー発生
  3. ターミナルで「heroku logs –tail」を実行
  4. 「bundler: failed to load command: puma」のエラー発生


heroku logs –tailでエラーの原因を特定

まずはターミナルでエラーの原因を確認してみます。

$heroku logs --tail


実行するとこのようにログ(履歴)を見ることができます。

今回はオレンジ線の部分がエラーの原因と推測しました。
State changed from starting to crashedと書いているところを重点的に見たほうが良いですね!)


対象部分だけ切り抜くと下のようなことが書いています。


エラー①

2020-08-17T13:47:09.690099+00:00 heroku[router]: at=error code=H10 
desc="App crashed" method=GET path="/favicon.ico" 
host=blogapp-keiver.herokuapp.com 
request_id=099fd697-f156-4bb9-9deb-045e3dfda033 fwd="126.255.31.108" 
dyno= connect= service= status=503 bytes= protocol=https

エラー②

bundler failed to load command:puma.....(以下省略)
OptionParser::AmbiguousOption:ambiguous option -c

【エラー①】code=H10….問題の解決方法

ネットで調べていると、この問題の沼にハマっている人を見つけることができました。

Qiitaの記事によると、Herokuを再起動すると直るようです。

詳しいコマンドについては記事を読んで欲しいのですが、一点誤解を招きそうなところがあったので補足しておきます。

HerokuでApplicationErrorが発生したときの対処法 – Qiita

heroku で運用を行っていると、原因不明の ApplicationError が発生することがあります。 30秒ルール以外で発生する場合、経験上はエラーコード H10 が発生していることが多いです。 Heroku Error Codes | H10 – App crashed この例の通り deploy 時に多く発生するのですが、原因が Gem や設定ファイルの不備に起因することはあるものの、deploy 内容に問題がないこともあります。 こういうときは再起動だ!って訳で以下のコマンドを実行するわけです。 heroku restart –app application_name でもこれやっても全く解消しないことも結構多いのです。 さて困った・・・。 こんなときは、以下のコマンドで再起動を実行しましょう。 heroku restart web.1 –app application_name これは WebDyno を個別に再起動するコマンド。例えば WebDyno を3つ使っていたら、下記コマンドを全部実行する必要があります。 heroku restart web.1 –app application_name heroku restart web.2 –app application_name heroku


Qiita記事に関する補足

記事の中でHerokuを再起動するために、下記コマンドを入力すると書いています。

$heroku restart --app application_name

ただ、上の通り「app application_name」としても、アプリがないよ!と言われてしまいます。

ターミナル
ターミナル

Couldn’t find that app


ですので、デプロイしたアプリ名に変えてコマンドを実行すればOKです。
僕の場合だとこんな感じですね。

$heroku restart -a blogapp-keiver

これで再起動が完了します。
以上Qiita記事に関する補足でした。

【エラー②】bundler failed to load command:pumaでpuma動かない問題

エラー①を解消できたものの、まだpumaが動かずエラーが出たままでした。

そもそもpumaって何?と思った方は下記記事が分かりやすくてオススメです。
Web用語で「APサーバ」と言われるやつです。

APサーバの役割とは?Webサーバとの違いをしっかり理解しよう!

APサーバ(アプリケーションサーバ)の役割とは、いったい何なのでしょうか? 実は、Webエンジニアのなかにも「APサーバ」を知らない方はたくさんいます。 特に、PHPしか触ったことがないエンジニアに非常に多いです。 PHPで作ったアプリケーションは「APサーバ」を必要としないので、知らなくて当然といえば当然。理由はのちほど。 …


もう一度、エラー画面を確認してみます。

bundler failed to load command:puma.....(以下省略)
OptionParser::AmbiguousOption:ambiguous option -c
ターミナル
ターミナル

pumaが読み込めないですけど?
オプションの「-c」がなんかおかしくない??


オプションとは、ターミナル上で入力する「rails -s」の「-s」の部分です。
今回はオプションの「-c」がおかしくて、「puma -c」を実行できずにエラーが出ているようです。

自分
自分

「puma -c」なんて入力したかな?

と思っていましたが、procfile内の誤記でした。

Heroku上でpumaを起動するのに、下のようなコードを書いていました。
(ちなみにGemfileと同じ階層にprocfileを作ります。)

web: bundle exec puma -c config/puma.rb
release: bundle exec rake db:migrate

と書いていましたが、正しくは大文字の「C」でした….

web: bundle exec puma -C config/puma.rb
release: bundle exec rake db:migrate


参考文献

今回は私のしょうもないミスでしたが、違う理由でpumaが動かない事例もあるみたいなので参考に記事を添付しておきます。

code=H10が発生した時に読もう!

Heroku展開エラーH10(アプリがクラッシュしました)

ローカルコンピューターでRoRアプリを使用していますが、herokuに送信するとクラッシュします。エラーログにはエラーH10が記録され、次のように表示されます。 2012-11-21T15:26:47+00:00 app[web…


pumaが動かない時に読もう!tmpファイルに問題あり?

bundler: failed to load command: puma – Qiita

エラー内容 pumaを起動するとbundler: failed to load command: pumaと言われる。 $ bundle exec puma -t 5:5 -p 3000 -e development -C c…

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です