FlaskアプリをHerokuでデプロイ。そしてエラー解決。

## 初めに
どうも、現在python歴3か月で転職の為に精進している者です。
今回ほぼ初めて、webアプリを作成し、Herokuにdeployしてみました。この際に色々なエラーや手間取った事もありましたので忘備録と少しでも皆様のお役に立てればと思い綴る事に致しました。

### 内容
今回はflaskで作成したwebアプリケーションをherokuでアップロードする際に発生したエラー解決について記述致します。
このようなエラー画面を解決しました。

![2022-07-24_20h12_26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2719278/e84ccf9f-715f-0b70-3349-8ab5e002479c.png)

**どう解決したか。**
この画面が出現する。⇒herokuでログを確認する。⇒修正して再デプロイ
この画面が出現する。⇒herokuでログを確認する。⇒修正して再デプロイ
その繰り返しです。
これらのエラーを発見し解決しました。

```ts
heroku[web.1]: Starting process with command `python main.py`
2022-07-24T10:10:15.098952+00:00 app[web.1]: python: can't open file 'main.py': [Errno 2] No such file or directory

ModuleNotFoundError: No module named 'cv2'
ImportError libgl.so.1 cannot open shared object file no such file or directory

Web process failed to bind to $PORT within 60 seconds of launch

```



### 環境
`windows11` 　`Heroku`　　`git hub`　　`VScode`

**下記の記事を参照してflask構築を致しました。記事はそこから先の話です。**
- VScodeとgit hubを連携させ、VScode上から基本的なgit操作/github操作をできるようにする。(branchの作成やcommit,push等)

- herokuにログインした後に基本的なデプロイ方法を把握する。


https://qiita.com/y-tsutsu/items/2ba96b16b220fb5913be#%E3%83%97%E3%83%83%E3%82%B7%E3%83%A5%E3%81%99%E3%82%8B

https://miya-system-works.com/blog/detail/vscode-github/

- Herokuについてはこちら。

https://qiita.com/sho4771k/items/6e8799743e2506cd62a0

https://cly7796.net/blog/other/check-the-logs-on-the-heroku-admin-screen/#:~:text=Heroku%E3%81%AB%E3%83%AD%E3%82%B0%E3%82%A4%E3%83%B3%E3%81%97%E3%81%A6,%E7%A2%BA%E8%AA%8D%E3%81%8C%E3%81%A7%E3%81%8D%E3%81%BE%E3%81%97%E3%81%9F%E3%80%82

## 本編

- 最初はログの確認方法が分からなかった。
実は最初にherokuのログ確認方法すら分からなかったのでそこからお話します。
下記画像のように`Open app`と`View logs`を行き来しました。[ログの見方の詳細はこちら](https://cly7796.net/blog/other/check-the-logs-on-the-heroku-admin-screen/#:~:text=Heroku%E3%81%AB%E3%83%AD%E3%82%B0%E3%82%A4%E3%83%B3%E3%81%97%E3%81%A6,%E7%A2%BA%E8%AA%8D%E3%81%8C%E3%81%A7%E3%81%8D%E3%81%BE%E3%81%97%E3%81%9F%E3%80%82
)

![2022-07-25_23h08_03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2719278/dd3a9e9c-0f49-20bc-7963-9a5b031baf7b.png)

### ログで確認し解決したエラー達。


```ts

heroku[web.1]: Starting process with command `python main.py`
2022-07-24T10:10:15.098952+00:00 app[web.1]: python: can't open file 'main.py': [Errno 2] No such file or directory

```
ご覧の通りmain.pyを開くことができませんよと。対処方法はこちら。

flaskの<font color="red">Procfile</font>の記載とpyファイルの名前確認。
Procfileこのコマンドによってmain.pyを動かすように指示をしているから。

![2022-07-25_23h21_05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2719278/cb99bcfa-52d1-d950-198b-83d660beb467.png)

その後にaddしてcommitしてpushして再度確認。(これはgit hubの操作。確認はherokuのopen Appで)VScodeのadd/commit/pushは[https://qiita.com/y-tsutsu/items/2ba96b16b220fb5913be#%E3%83%97%E3%83%83%E3%82%B7%E3%83%A5%E3%81%99%E3%82%8B](http://qiita.com)

**これによりエラー解決し、別のエラーが出現した**

次のエラーがこちら。

```ts
 ModuleNotFoundError: No module named 'cv2'
ImportError libgl.so.1 cannot open shared object file no such file or directory
```
ご覧の通りcv2がないですよと。対処方法はこちら。
`requirements.txt`に適宜必要なモジュールをインポートしてください。
私の場合はcv2が足りなかったので<font color="red">opencv-python--headless==4.5.1.48</font>を付け加えました。
headlessの意味は不明ですが、下記サイトを参考に付け加えました。
[詳細はこちら](https://qiita.com/soyeiji1220/items/651e40a90904e028795d)

![2022-07-25_23h40_19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2719278/eac7d292-c713-dd6f-7ff9-d5c4e4501bab.png)

**これによりエラー解決し、別のエラーが出現した**


次のエラーがこちら。

```ts
Web process failed to bind to $PORT within 60 seconds of launch
```

一番下の設定を変更しました。きちんとherokuに対応するものに書き換える。

![2022-07-26_00h01_41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2719278/be623c1d-1a58-b21b-fccd-8e8be7e36151.png)


```python
if __name__ == "__main__":
    port = int(os.environ.get('PORT', 8080))
    app.run(host ="0.0.0.0",port = port)
```

### <font color="red">エラー解決。Open app無事通る。</font>

## 終わりに

地道な作業でしたが、以前よりも少しだけflaskについての理解が深まった感じがします。
まだ一般的な理解とは程遠いですが…。