【Heroku】デプロイ後にcode=H14 desc="No web processes running"

## 事象
話の流れとしては[この記事](https://qiita.com/rebi/items/373dfcf53cacfd027f7a)の続きになります。

Dockerで開発環境構築をしたRailsアプリのコンテナをpushすることができたのですが、その後

```console
$ heroku addons:create heroku-postgresql:hobby-dev

$ heroku container:release "コンテナ名"

$ heroku open
```

として、サイトを開いてみると、

<img width="1437" alt="スクリーンショット 2019-09-24 7.44.05.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/239294/9768657b-93c7-0fa7-2b8b-63cf89003f56.png">

とHerokuのエラーが発生していました。

## 解決方法
まず、画面に書かれている通り、コンソール上で`heroku logs --tail`を実行してみたところ


```console
$ 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"`が発生しているようなので、この文言で検索してみると、[こちら](https://devcenter.heroku.com/articles/error-codes#h14-no-web-dynos-running)の公式ドキュメントを発見。

公式ドキュメントによると、`heroku ps:scale web=1`を叩けとのことなので、叩いてみると、

```console
$ 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を見てみると、

<img width="1224" alt="スクリーンショット 2019-10-26 13.04.19.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/239294/60ea63e7-209f-551d-a190-1e6e580244c3.png">

と表示されていました。

どうやら、heroku.ymlが含まれていないことが原因の模様で、解決するにはheroku.ymlを作成するか、`heroku stack:set heroku-18`を実行する必要があるとのこと。

そこでまずはheroku.ymlを作成する方針をとってみました。

Buildlogに記載されていた[公式ドキュメント](https://devcenter.heroku.com/articles/build-docker-images-heroku-yml#getting-started)を参考に下記のシンプルなheroku.ymlを作成しました。

```yml:heroku.yml
build:
  docker:
    web: Dockerfile
```

その後

```console
$ heroku stack:set container
$ git push heroku master
```
を実行し、再度`heroku ps:scale web=1`を実行してみると、

```console
$ heroku ps:scale web=1
Scaling dynos... done, now running web at 1:Free
```
となり成功しました。

改めてURLにアクセスしてみると、Herokuに関するエラーは消え、Railsにおいて、DBが見つからないエラーが発生していたので、[公式サイト](https://devcenter.heroku.com/articles/getting-started-with-rails5#migrate-your-database)
を参考に

```console
$ heroku run rake db:migrate
```
としてマイグレーションを実行したところ、とうとうお馴染みの画面がお出迎えしてくれました。

<img width="563" alt="スクリーンショット 2019-10-26 13.17.10.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/239294/483629fa-9e93-19f8-a9c3-e4d1ac781d1d.png">

## 原因
[公式ドキュメント](https://devcenter.heroku.com/articles/error-codes#h14-no-web-dynos-running)によると、webサイトに対して`dynos`が割り当てられていないのが原因で、H14が発生してしまう模様で、それを割り当てるためのコマンドが`heroku ps:scale web=1`です。

ちなみに`dynos`とは、`dyno`の複数形で、公式の`dyno`[解説記事](https://jp.heroku.com/dynos)によると、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