事象
話の流れとしてはこの記事の続きになります。
Dockerで開発環境構築をしたRailsアプリのコンテナをpushすることができたのですが、その後
$ heroku addons:create heroku-postgresql:hobby-dev
$ heroku container:release "コンテナ名"
$ heroku open
として、サイトを開いてみると、
![スクリーンショット 2019-09-24 7.44.05.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F239294%2F9768657b-93c7-0fa7-2b8b-63cf89003f56.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=c28ac313f0aebc07a9380d3d1bae3b6c)
とHerokuのエラーが発生していました。
解決方法
まず、画面に書かれている通り、コンソール上でheroku logs --tail
を実行してみたところ
$ heroku logs --tail
2019-09-10T22:53:00.595256+00:00 heroku[router]: at=error code=H14 desc="No web processes running" method=GET path="/" host=safe-basin-05606.herokuapp.com request_id=e797e1d4-8327-4285-b525-986ed50ea467 fwd="160.237.76.19" dyno= connect= service= status=503 bytes= protocol=https
2019-09-10T22:53:01.484857+00:00 heroku[router]: at=error code=H14 desc="No web processes running" method=GET path="/favicon.ico" host=safe-basin-05606.herokuapp.com request_id=f8c9be65-f445-4b0d-a4fa-83b27c76762f fwd="160.237.76.19" dyno= connect= service= status=503 bytes= protocol=https
と出力されました。
ログによるとcode=H14 desc="No web processes running"
が発生しているようなので、この文言で検索してみると、こちらの公式ドキュメントを発見。
公式ドキュメントによると、heroku ps:scale web=1
を叩けとのことなので、叩いてみると、
$ heroku ps:scale web=1
› Warning: heroku update available from 7.26.2 to 7.29.0.
Scaling dynos... !
▸ Couldn't find that process type (web).
と出力され、失敗してしまいました。
改めて、Web上でherokuのBuildlogを見てみると、
![スクリーンショット 2019-10-26 13.04.19.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F239294%2F60ea63e7-209f-551d-a190-1e6e580244c3.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=b26b703abc3fbb1610daa614b76e60e3)
と表示されていました。
どうやら、heroku.ymlが含まれていないことが原因の模様で、解決するにはheroku.ymlを作成するか、heroku stack:set heroku-18
を実行する必要があるとのこと。
そこでまずはheroku.ymlを作成する方針をとってみました。
Buildlogに記載されていた公式ドキュメントを参考に下記のシンプルなheroku.ymlを作成しました。
build:
docker:
web: Dockerfile
その後
$ heroku stack:set container
$ git push heroku master
を実行し、再度heroku ps:scale web=1
を実行してみると、
$ heroku ps:scale web=1
Scaling dynos... done, now running web at 1:Free
となり成功しました。
改めてURLにアクセスしてみると、Herokuに関するエラーは消え、Railsにおいて、DBが見つからないエラーが発生していたので、公式サイト
を参考に
$ heroku run rake db:migrate
としてマイグレーションを実行したところ、とうとうお馴染みの画面がお出迎えしてくれました。
![スクリーンショット 2019-10-26 13.17.10.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F239294%2F483629fa-9e93-19f8-a9c3-e4d1ac781d1d.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=7acc801e470135efc33b97f453df40f3)
原因
公式ドキュメントによると、webサイトに対してdynos
が割り当てられていないのが原因で、H14が発生してしまう模様で、それを割り当てるためのコマンドがheroku ps:scale web=1
です。
ちなみにdynos
とは、dyno
の複数形で、公式のdyno
解説記事によると、Herokuで使用されるコンテナのことをdyno
と呼んでいるそうです。
ただ、heroku.yml
を作成するまで、heroku ps:scale web=1
が成功しなかった理由は今の所わかっていません。ご存知の方がいれば、ご教示いただきますと幸いです。
また、heroku.yml
を作成せず、Buildlogに記載されていた、heroku stack:set heroku-18
を実行したらどうなっていたかというのも気になりますので、同じ症状に出会い試された方がいれば、ご教示いただけますと幸いです。
まとめ
Herokuデプロイ後にcode=H14 desc="No web processes running"
が発生したら、
heroku ps:scale web=1
を試してみてください。
このコマンドが成功しない場合は、heroku.yml
を作成した後で再度試してみてください。
この記事が少しでも誰かのお役に立てれば幸いです。
最後までお読みいただきありがとうございました。
参考文献
公式ドキュメント
Heroku Error Codes
https://devcenter.heroku.com/articles/error-codes#h14-no-web-dynos-running
Building Docker Images with heroku.yml
https://devcenter.heroku.com/articles/build-docker-images-heroku-yml#getting-started
Getting Started on Heroku with Rails 5.x
https://devcenter.heroku.com/articles/getting-started-with-rails5#migrate-your-database
dyno:Heroku プラットフォームの中核
https://jp.heroku.com/dynos