初めに
どうも、現在python歴3か月で転職の為に精進している者です。
今回ほぼ初めて、webアプリを作成し、Herokuにdeployしてみました。この際に色々なエラーや手間取った事もありましたので忘備録と少しでも皆様のお役に立てればと思い綴る事に致しました。
内容
今回はflaskで作成したwebアプリケーションをherokuでアップロードする際に発生したエラー解決について記述致します。
このようなエラー画面を解決しました。
どう解決したか。
この画面が出現する。⇒herokuでログを確認する。⇒修正して再デプロイ
この画面が出現する。⇒herokuでログを確認する。⇒修正して再デプロイ
その繰り返しです。
これらのエラーを発見し解決しました。
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にログインした後に基本的なデプロイ方法を把握する。
- Herokuについてはこちら。
本編
- 最初はログの確認方法が分からなかった。
実は最初にherokuのログ確認方法すら分からなかったのでそこからお話します。
下記画像のようにOpen app
とView logs
を行き来しました。ログの見方の詳細はこちら
ログで確認し解決したエラー達。
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のProcfileの記載とpyファイルの名前確認。
Procfileこのコマンドによってmain.pyを動かすように指示をしているから。
その後に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
これによりエラー解決し、別のエラーが出現した
次のエラーがこちら。
ModuleNotFoundError: No module named 'cv2'
ImportError libgl.so.1 cannot open shared object file no such file or directory
ご覧の通りcv2がないですよと。対処方法はこちら。
requirements.txt
に適宜必要なモジュールをインポートしてください。
私の場合はcv2が足りなかったのでopencv-python--headless==4.5.1.48を付け加えました。
headlessの意味は不明ですが、下記サイトを参考に付け加えました。
詳細はこちら
これによりエラー解決し、別のエラーが出現した
次のエラーがこちら。
Web process failed to bind to $PORT within 60 seconds of launch
一番下の設定を変更しました。きちんとherokuに対応するものに書き換える。
if __name__ == "__main__":
port = int(os.environ.get('PORT', 8080))
app.run(host ="0.0.0.0",port = port)
エラー解決。Open app無事通る。
終わりに
地道な作業でしたが、以前よりも少しだけflaskについての理解が深まった感じがします。
まだ一般的な理解とは程遠いですが…。