ModuleNotFoundError: No module named ‘xxx.wsgi’の原因について
- 2020.10.11
- PYTHONの使い方 プログラミング・技術・開発
- エラー解説

当記事では、エラー「ModuleNotFoundError: No module named ‘xxx.wsgi’」が発生したときの原因及び解消方法について、私が調べた結果を備忘録として載せます。
エラーが発生した状況
【環境】
言語:python
フレームワーク:Django
サーバー:heroku
①ローカル環境では、実行できることを確認済
②herokuサーバにデプロイするとデプロイ成功後、「at=error code=H10 desc=”App crashed”」とログに表示される
③詳細を確認したところ、「ModuleNotFoundError: No module named ‘アプリ名.wsgi’」が発生
※詳細の確認については、下記の補足を参照
Procfile
web: gunicorn アプリ名.wsgi --log-file -
エラーログ
2020-10-11T03:26:41.025220+00:00 app[web.1]: File "<frozen importlib._bootstrap>", line 994, in _gcd_import 2020-10-11T03:26:41.025220+00:00 app[web.1]: File "<frozen importlib._bootstrap>", line 971, in _find_and_load 2020-10-11T03:26:41.025220+00:00 app[web.1]: File "<frozen importlib._bootstrap>", line 953, in _find_and_load_unlocked 2020-10-11T03:26:41.025226+00:00 app[web.1]: ModuleNotFoundError: No module named 'アプリ名.wsgi' 2020-10-11T03:26:41.025389+00:00 app[web.1]: [2020-10-11 03:26:41 +0000] [10] [INFO] Worker exiting (pid: 10) 2020-10-11T03:26:41.029372+00:00 app[web.1]: [2020-10-11 03:26:41 +0000] [11] [ERROR] Exception in worker process
原因および解消方法
【原因】
Procfileの記載内容が間違えている
【対処方法】
Procfileの記載内容を修正
誤り
※アプリ名で固定ではない。
web: gunicorn 【アプリ名】.wsgi --log-file -
↓
正しい
※setting.py – WSGI_APPLICATIONの変数に記載されている「config.wsgi」
web: gunicorn config.wsgi --log-file -
【エラー解説】
Procfileのgunicornコマンドは、runserverコマンドの強化版のようなものです。
runserverコマンドでは、setting.pyに記載されている下記の変数を使用しています。
WSGI_APPLICATION = 'config.wsgi.application'
既にローカル環境で実行できることを確認しており、今回のようなエラー「ModuleNotFoundError: No module named ‘アプリ名.wsgi’」が発生する場合は、Procfileに記載されている内容がsetting.pyとずれていないか確認してください。
ネット上では、Procfileには、アプリ名を記載するように書かれていますが、正確には、setting.pyファイルを参照し、記載すべきです。
まとめ
Procfileに記載する内容は、「web: gunicorn 【アプリ名】.wsgi –log-file -」固定ではない。
正しくは、「web: gunicorn 【setting.py – WSGI_APPLICATIONを参照】.wsgi –log-file -」である。
補足
herokuサーバにデプロイ後、アプリがcrashした場合、herokuのログにはcrashしか表示されない。
2020-10-11T03:04:38.796013+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/" host=instafavobot.herokuapp.com request_id=bdd7e9cb-c48b-41d1-b6fb-05b2a009c15c fwd="110.1.100.137" dyno= connect= service= status=503 bytes= protocol=https 2020-10-11T03:04:40.000712+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/favicon.ico" host=instafavobot.herokuapp.com request_id=20a1a4a3-3a8a-4a6f-ae3d-fae01dcc7e6f fwd="110.1.100.137" dyno= connect= service= status=503 bytes= protocol=https
詳細を確認するには、herokuでログを表示しながらデプロイを行うと、詳細なエラーが表示される。
2020-10-11T03:26:03.000000+00:00 app[api]: Build started by user 2020-10-11T03:26:33.050976+00:00 app[api]: Deploy e010284c by user 2020-10-11T03:26:33.050976+00:00 app[api]: Release v8 created by user 2020-10-11T03:26:33.504864+00:00 heroku[web.1]: State changed from crashed to starting 2020-10-11T03:26:38.637873+00:00 heroku[web.1]: Starting process with command `gunicorn insta_auto_iine_app.wsgi --log-file -` 2020-10-11T03:26:41.256697+00:00 heroku[web.1]: Process exited with status 3 2020-10-11T03:26:41.301623+00:00 heroku[web.1]: State changed from starting to crashed ... 2020-10-11T03:26:41.029555+00:00 app[web.1]: ModuleNotFoundError: No module named 'insta_auto_iine_app.wsgi'
-
前の記事
ホリエモンに学ぶお金の本質について 2020.10.05
-
次の記事
FlutterError (Unable to load asset: assets/images/xxx.jpg)について 2021.01.20