【heroku 】bundler: failed to load command: pumaのエラー対応【デイトラ】

  • herokuにデプロイする際にApplication errorが発生した
  • pumaが動かない
  • heroku logs –tailの見方が分からない
ケイ
ケイ

こんにちは!
Ruby on Rails学習者のケイ(@new_design)です。

今回はHerokuにデプロイした際に発生したエラーの対応を解説していきます。
ちなみになぜデプロイが必要かと言うと、ローカル環境(皆さんのPC)で作ったアプリケーションを色んな人がWeb上で見れるようにするためですね。

まずはエラーを整理しよう

Herokuへデプロイは完了したのですが、アプリの画面が下画像のようになりました。おそらくソースコード内におかしい部分があるかと思います。

Herokuでデプロイ後

画面上にエラーが出た場合の対処方法を書いてくれています。内容を要約すると「heroku logs –tailコマンドでログを確認してね」といった感じです。

ちなみに英語に不安を感じる方はDeepl(ディープル)という翻訳アプリがおすすめです。技術的な文章でも違和感のない翻訳をしてくれます。

まずはターミナルで下記コマンドを入力してください。

$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

何やらcode = H10なるものがおかしいようですね。

エラー②

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

pumaコマンドの読み込みに失敗しているようです。

エラー① code=H10….の解決方法

code = H10のエラーが出た場合、Herokuを再起動すると直すことが多いようです。

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

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


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

$heroku restart --app application_name

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


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

$heroku restart -a blogapp-keiver

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

エラー② bundler failed to load command:puma

2つ目のpumaに関するエラーについて解説していきます。

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

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


オプションとは、ターミナル上で入力する「rails -s」の「-s」の部分です。


今回はオプションの「-c」がおかしくて、「puma -c」を実行できずにエラーが出ているようです。なるほど。

Procfile上に下記コードを書いていました。ちなみにHeroku上でpumaを動かすために、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

このようにログを見れば、エラー箇所の特定ができます。初めは難しいですが、何度も確認していれば慣れてきますので、頑張りましょう!

参考記事で理解を深めよう

最後に参考になった記事を紹介しておきます。APサーバとかpumaって何?って方におすすめです。

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

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

pumaが動かない場合の対応例を紹介しています。

bundler: failed to load command: puma – Qiita

More than 1 year has passed since last update. pumaを起動すると bundler: failed to load command: puma と言われる。 $bundle exec puma -t 5:5 -p 3000 -e development -C config/puma.rb Puma starting in single mode…

コメントを残す

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