概要
今回は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
このようにログを見れば、エラー箇所の特定ができます。
解説は以上です。