CodeBox CodeBox

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

Ruby / Rails
けい

概要

今回はHerokuにデプロイした際に発生したエラー『bundler: failed to load command: puma』の対応を解説していきます。

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

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


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

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

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

$heroku logs --tail


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


上の画像だと見づらいので対象部分だけ切り抜くと下のようなことが書いています。

[エラー①]
何やらcode = H10なるものがおかしいようですね。

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


[エラー②]
pumaコマンドの読み込みに失敗しているようです。

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


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

code = H10のエラーが出た場合、Herokuを再起動すると直すことが多いようです。詳しいコマンドについてはQiita記事を読んで欲しいのですが、一点誤解を招きそうなところがあったので補足しておきます。

参考記事

記事の中でHerokuを再起動するために、下記コマンドを入力すると紹介されています。
ただ「app application_name」としても、アプリがないよ!と言われてしまいます。

$heroku restart --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」を実行できずにエラーが出ているようです。

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


このようにログを見れば、エラー箇所の特定ができます。

解説は以上です。

ABOUT ME

けい
ベンチャーのフロントエンジニア。 主にVueとTypescriptを使っています。ライターのための文字数カウントアプリ:https://easy-count.vercel.app/