Heroku deploy problem: ModuleNotFoundError: No module named 'FatCatFish.wsgi'
Heroku deploy problem: ModuleNotFoundError: No module named 'FatCatFish.wsgi'
我正在尝试部署一个带有 Django 后端的全栈应用程序。在本地一切正常,heroku 说构建成功但网络服务器没有 运行。我错过了什么?我需要启动项目和 运行 迁移吗?
Procfile 在我的项目根目录中,我的 manage.py 在 FatCatFish 中。
过程文件
web: gunicorn FatCatFish.wsgi --log-file -
wsgi:
import os
from whitenoise.django import DjangoWhiteNoise
from django.core.wsgi import get_wsgi_application
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'FatCatFish.settings')
application = get_wsgi_application()
application = DjangoWhiteNoise(application)
日志:
2020-05-25T23:26:31.413415+00:00 heroku[web.1]: State changed from crashed to starting
2020-05-25T23:26:44.404022+00:00 heroku[web.1]: Starting process with command `gunicorn FatCatFish.wsgi --log-file -`
2020-05-25T23:26:47.619979+00:00 heroku[web.1]: Process exited with status 3
2020-05-25T23:26:47.668525+00:00 heroku[web.1]: State changed from starting to crashed
2020-05-25T23:26:47.481429+00:00 app[web.1]: [2020-05-25 23:26:47 +0000] [4] [INFO] Starting gunicorn 20.0.4
2020-05-25T23:26:47.482134+00:00 app[web.1]: [2020-05-25 23:26:47 +0000] [4] [INFO] Listening at: http://0.0.0.0:46677 (4)
2020-05-25T23:26:47.482290+00:00 app[web.1]: [2020-05-25 23:26:47 +0000] [4] [INFO] Using worker: sync
2020-05-25T23:26:47.487376+00:00 app[web.1]: [2020-05-25 23:26:47 +0000] [10] [INFO] Booting worker with pid: 10
2020-05-25T23:26:47.494729+00:00 app[web.1]: [2020-05-25 23:26:47 +0000] [10] [ERROR] Exception in worker process
...
2020-05-25T23:26:47.494768+00:00 app[web.1]: ModuleNotFoundError: No module named 'FatCatFish.wsgi'
根目录下的文件和文件夹:
FatCatFish
│ manage.py
│
├───FatCatFish
│ │ asgi.py
│ │ settings.py
│ │ urls.py
│ │ wsgi.py
│ │ __init__.py
│ │
│ └───__pycache__
│ settings.cpython-37.pyc
│ urls.cpython-37.pyc
│ wsgi.cpython-37.pyc
│ __init__.cpython-37.pyc
│
├───frontend
│ │ admin.py
│ │ apps.py
│ │ models.py
│ │ tests.py
│ │ urls.py
│ │ views.py
│ │ __init__.py
│ │
│ ├───migrations
│ │ │ __init__.py
│ │ │
│ │ └───__pycache__
│ │ __init__.cpython-37.pyc
│ │
│ ├───src
│ │ │ index.js
│ │ │ store.js
│ │ │
│ │ ├───actions
│ │ │ auth.js
│ │ │ messages.js
│ │ │ plans.js
│ │ │ temperatures.js
│ │ │ tickets.js
│ │ │ types.js
│ │ │ users.js
│ │ │
│ │ ├───components
│ │ │ │ App.js
│ │ │ │
│ │ │ ├───common
│ │ │ │ PrivateRoute.js
│ │ │ │
│ │ │ ├───layout
│ │ │ │ Alerts.js
│ │ │ │ Header.js
│ │ │ │
│ │ │ ├───logindashboard
│ │ │ │ LoginDashboard.js
│ │ │ │
│ │ │ ├───plans
│ │ │ │ Dashboard.js
│ │ │ │ Form.js
│ │ │ │ Plans.js
│ │ │ │
│ │ │ ├───temperatures
│ │ │ │ TemperaturesCharts.js
│ │ │ │ TemperaturesDashboard.js
│ │ │ │ TemperatureSetup.js
│ │ │ │ TemperaturesNow.js
│ │ │ │
│ │ │ ├───tickets
│ │ │ │ CategoryForm.js
│ │ │ │ RepairForm.js
│ │ │ │ TicketDashboard.js
│ │ │ │ TicketForm.js
│ │ │ │ Tickets.js
│ │ │ │
│ │ │ └───users
│ │ │ Login.js
│ │ │ UpdateUser.js
│ │ │ UserDashboard.js
│ │ │ UserForm.js
│ │ │ Users.js
│ │ │
│ │ └───reducers
│ │ auth.js
│ │ errors.js
│ │ index.js
│ │ messages.js
│ │ plans.js
│ │ temperatures.js
│ │ tickets.js
│ │ users.js
│ │
│ ├───static
│ │ ├───css
│ │ │ sticky-footer-navbar.css
│ │ │ styles.css
│ │ │
│ │ ├───frontend
│ │ │ main.js
│ │ │
│ │ └───images
│ │ 404_banana_splits.jpg
│ │ 500_catboat.jpg
│ │ top_gradient.gif
│ │
│ ├───templates
│ │ │ 403.html
│ │ │ 404.html
│ │ │ 500.html
│ │ │ base.html
│ │ │ home.html
│ │ │
│ │ ├───frontend
│ │ │ index.html
│ │ │
│ │ └───registration
│ │ login.html
│ │
│ └───__pycache__
│ admin.cpython-37.pyc
│ models.cpython-37.pyc
│ tests.cpython-37.pyc
│ urls.cpython-37.pyc
│ views.cpython-37.pyc
│ __init__.cpython-37.pyc
│
├───plans
│ │ admin.py
│ │ api.py
│ │ apps.py
│ │ models.py
│ │ serializers.py
│ │ tests.py
│ │ urls.py
│ │ views.py
│ │ __init__.py
│ │
│ ├───migrations
│ │ │ 0001_initial.py
│ │ │ 0002_auto_20200302_1807.py
│ │ │ 0003_auto_20200517_1008.py
│ │ │ 0004_auto_20200523_1201.py
│ │ │ __init__.py
│ │ │
│ │ └───__pycache__
│ │ 0001_initial.cpython-37.pyc
│ │ 0002_auto_20200302_1807.cpython-37.pyc
│ │ 0003_auto_20200517_1008.cpython-37.pyc
│ │ 0004_auto_20200523_1201.cpython-37.pyc
│ │ __init__.cpython-37.pyc
│ │
│ └───__pycache__
│ admin.cpython-37.pyc
│ api.cpython-37.pyc
│ models.cpython-37.pyc
│ serializers.cpython-37.pyc
│ tests.cpython-37.pyc
│ urls.cpython-37.pyc
│ __init__.cpython-37.pyc
│
├───staticfiles
├───temperatures
│ │ admin.py
│ │ api.py
│ │ apps.py
│ │ models.py
│ │ serializers.py
│ │ tests.py
│ │ urls.py
│ │ views.py
│ │ __init__.py
│ │
│ ├───migrations
│ │ │ 0001_initial.py
│ │ │ 0002_temp_active.py
│ │ │ 0003_auto_20200405_1638.py
│ │ │ 0004_auto_20200406_2031.py
│ │ │ 0005_sourcemap_active.py
│ │ │ __init__.py
│ │ │
│ │ └───__pycache__
│ │ 0001_initial.cpython-37.pyc
│ │ 0002_temp_active.cpython-37.pyc
│ │ 0003_auto_20200405_1638.cpython-37.pyc
│ │ 0004_auto_20200406_2031.cpython-37.pyc
│ │ 0005_sourcemap_active.cpython-37.pyc
│ │ __init__.cpython-37.pyc
│ │
│ └───__pycache__
│ admin.cpython-37.pyc
│ api.cpython-37.pyc
│ models.cpython-37.pyc
│ serializers.cpython-37.pyc
│ urls.cpython-37.pyc
│ __init__.cpython-37.pyc
│
├───tickets
│ │ admin.py
│ │ api.py
│ │ apps.py
│ │ models.py
│ │ serializers.py
│ │ tests.py
│ │ urls.py
│ │ views.py
│ │ __init__.py
│ │
│ ├───migrations
│ │ │ 0001_initial.py
│ │ │ 0002_auto_20200423_1533.py
│ │ │ __init__.py
│ │ │
│ │ └───__pycache__
│ │ 0001_initial.cpython-37.pyc
│ │ 0002_auto_20200423_1533.cpython-37.pyc
│ │ __init__.cpython-37.pyc
│ │
│ └───__pycache__
│ admin.cpython-37.pyc
│ api.cpython-37.pyc
│ models.cpython-37.pyc
│ serializers.cpython-37.pyc
│ urls.cpython-37.pyc
│ views.cpython-37.pyc
│ __init__.cpython-37.pyc
│
└───users
│ admin.py
│ api.py
│ apps.py
│ forms.py
│ models.py
│ serializers.py
│ tests.py
│ urls.py
│ views.py
│ __init__.py
│
├───migrations
│ │ 0001_initial.py
│ │ __init__.py
│ │
│ └───__pycache__
│ 0001_initial.cpython-37.pyc
│ 0002_customuser_starttime.cpython-37.pyc
│ __init__.cpython-37.pyc
│
└───__pycache__
admin.cpython-37.pyc
api.cpython-37.pyc
apps.cpython-37.pyc
forms.cpython-37.pyc
models.cpython-37.pyc
serializers.cpython-37.pyc
tests.cpython-37.pyc
urls.cpython-37.pyc
__init__.cpython-37.pyc
以上是需求和procfile。
web: gunicorn --pythonpath FatCatFish FatCatFish.wsgi --log-file -
--pythonpath pathToWSGIFile wsgiFile
我正在尝试部署一个带有 Django 后端的全栈应用程序。在本地一切正常,heroku 说构建成功但网络服务器没有 运行。我错过了什么?我需要启动项目和 运行 迁移吗?
Procfile 在我的项目根目录中,我的 manage.py 在 FatCatFish 中。
过程文件
web: gunicorn FatCatFish.wsgi --log-file -
wsgi:
import os
from whitenoise.django import DjangoWhiteNoise
from django.core.wsgi import get_wsgi_application
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'FatCatFish.settings')
application = get_wsgi_application()
application = DjangoWhiteNoise(application)
日志:
2020-05-25T23:26:31.413415+00:00 heroku[web.1]: State changed from crashed to starting
2020-05-25T23:26:44.404022+00:00 heroku[web.1]: Starting process with command `gunicorn FatCatFish.wsgi --log-file -`
2020-05-25T23:26:47.619979+00:00 heroku[web.1]: Process exited with status 3
2020-05-25T23:26:47.668525+00:00 heroku[web.1]: State changed from starting to crashed
2020-05-25T23:26:47.481429+00:00 app[web.1]: [2020-05-25 23:26:47 +0000] [4] [INFO] Starting gunicorn 20.0.4
2020-05-25T23:26:47.482134+00:00 app[web.1]: [2020-05-25 23:26:47 +0000] [4] [INFO] Listening at: http://0.0.0.0:46677 (4)
2020-05-25T23:26:47.482290+00:00 app[web.1]: [2020-05-25 23:26:47 +0000] [4] [INFO] Using worker: sync
2020-05-25T23:26:47.487376+00:00 app[web.1]: [2020-05-25 23:26:47 +0000] [10] [INFO] Booting worker with pid: 10
2020-05-25T23:26:47.494729+00:00 app[web.1]: [2020-05-25 23:26:47 +0000] [10] [ERROR] Exception in worker process
...
2020-05-25T23:26:47.494768+00:00 app[web.1]: ModuleNotFoundError: No module named 'FatCatFish.wsgi'
根目录下的文件和文件夹:
FatCatFish
│ manage.py
│
├───FatCatFish
│ │ asgi.py
│ │ settings.py
│ │ urls.py
│ │ wsgi.py
│ │ __init__.py
│ │
│ └───__pycache__
│ settings.cpython-37.pyc
│ urls.cpython-37.pyc
│ wsgi.cpython-37.pyc
│ __init__.cpython-37.pyc
│
├───frontend
│ │ admin.py
│ │ apps.py
│ │ models.py
│ │ tests.py
│ │ urls.py
│ │ views.py
│ │ __init__.py
│ │
│ ├───migrations
│ │ │ __init__.py
│ │ │
│ │ └───__pycache__
│ │ __init__.cpython-37.pyc
│ │
│ ├───src
│ │ │ index.js
│ │ │ store.js
│ │ │
│ │ ├───actions
│ │ │ auth.js
│ │ │ messages.js
│ │ │ plans.js
│ │ │ temperatures.js
│ │ │ tickets.js
│ │ │ types.js
│ │ │ users.js
│ │ │
│ │ ├───components
│ │ │ │ App.js
│ │ │ │
│ │ │ ├───common
│ │ │ │ PrivateRoute.js
│ │ │ │
│ │ │ ├───layout
│ │ │ │ Alerts.js
│ │ │ │ Header.js
│ │ │ │
│ │ │ ├───logindashboard
│ │ │ │ LoginDashboard.js
│ │ │ │
│ │ │ ├───plans
│ │ │ │ Dashboard.js
│ │ │ │ Form.js
│ │ │ │ Plans.js
│ │ │ │
│ │ │ ├───temperatures
│ │ │ │ TemperaturesCharts.js
│ │ │ │ TemperaturesDashboard.js
│ │ │ │ TemperatureSetup.js
│ │ │ │ TemperaturesNow.js
│ │ │ │
│ │ │ ├───tickets
│ │ │ │ CategoryForm.js
│ │ │ │ RepairForm.js
│ │ │ │ TicketDashboard.js
│ │ │ │ TicketForm.js
│ │ │ │ Tickets.js
│ │ │ │
│ │ │ └───users
│ │ │ Login.js
│ │ │ UpdateUser.js
│ │ │ UserDashboard.js
│ │ │ UserForm.js
│ │ │ Users.js
│ │ │
│ │ └───reducers
│ │ auth.js
│ │ errors.js
│ │ index.js
│ │ messages.js
│ │ plans.js
│ │ temperatures.js
│ │ tickets.js
│ │ users.js
│ │
│ ├───static
│ │ ├───css
│ │ │ sticky-footer-navbar.css
│ │ │ styles.css
│ │ │
│ │ ├───frontend
│ │ │ main.js
│ │ │
│ │ └───images
│ │ 404_banana_splits.jpg
│ │ 500_catboat.jpg
│ │ top_gradient.gif
│ │
│ ├───templates
│ │ │ 403.html
│ │ │ 404.html
│ │ │ 500.html
│ │ │ base.html
│ │ │ home.html
│ │ │
│ │ ├───frontend
│ │ │ index.html
│ │ │
│ │ └───registration
│ │ login.html
│ │
│ └───__pycache__
│ admin.cpython-37.pyc
│ models.cpython-37.pyc
│ tests.cpython-37.pyc
│ urls.cpython-37.pyc
│ views.cpython-37.pyc
│ __init__.cpython-37.pyc
│
├───plans
│ │ admin.py
│ │ api.py
│ │ apps.py
│ │ models.py
│ │ serializers.py
│ │ tests.py
│ │ urls.py
│ │ views.py
│ │ __init__.py
│ │
│ ├───migrations
│ │ │ 0001_initial.py
│ │ │ 0002_auto_20200302_1807.py
│ │ │ 0003_auto_20200517_1008.py
│ │ │ 0004_auto_20200523_1201.py
│ │ │ __init__.py
│ │ │
│ │ └───__pycache__
│ │ 0001_initial.cpython-37.pyc
│ │ 0002_auto_20200302_1807.cpython-37.pyc
│ │ 0003_auto_20200517_1008.cpython-37.pyc
│ │ 0004_auto_20200523_1201.cpython-37.pyc
│ │ __init__.cpython-37.pyc
│ │
│ └───__pycache__
│ admin.cpython-37.pyc
│ api.cpython-37.pyc
│ models.cpython-37.pyc
│ serializers.cpython-37.pyc
│ tests.cpython-37.pyc
│ urls.cpython-37.pyc
│ __init__.cpython-37.pyc
│
├───staticfiles
├───temperatures
│ │ admin.py
│ │ api.py
│ │ apps.py
│ │ models.py
│ │ serializers.py
│ │ tests.py
│ │ urls.py
│ │ views.py
│ │ __init__.py
│ │
│ ├───migrations
│ │ │ 0001_initial.py
│ │ │ 0002_temp_active.py
│ │ │ 0003_auto_20200405_1638.py
│ │ │ 0004_auto_20200406_2031.py
│ │ │ 0005_sourcemap_active.py
│ │ │ __init__.py
│ │ │
│ │ └───__pycache__
│ │ 0001_initial.cpython-37.pyc
│ │ 0002_temp_active.cpython-37.pyc
│ │ 0003_auto_20200405_1638.cpython-37.pyc
│ │ 0004_auto_20200406_2031.cpython-37.pyc
│ │ 0005_sourcemap_active.cpython-37.pyc
│ │ __init__.cpython-37.pyc
│ │
│ └───__pycache__
│ admin.cpython-37.pyc
│ api.cpython-37.pyc
│ models.cpython-37.pyc
│ serializers.cpython-37.pyc
│ urls.cpython-37.pyc
│ __init__.cpython-37.pyc
│
├───tickets
│ │ admin.py
│ │ api.py
│ │ apps.py
│ │ models.py
│ │ serializers.py
│ │ tests.py
│ │ urls.py
│ │ views.py
│ │ __init__.py
│ │
│ ├───migrations
│ │ │ 0001_initial.py
│ │ │ 0002_auto_20200423_1533.py
│ │ │ __init__.py
│ │ │
│ │ └───__pycache__
│ │ 0001_initial.cpython-37.pyc
│ │ 0002_auto_20200423_1533.cpython-37.pyc
│ │ __init__.cpython-37.pyc
│ │
│ └───__pycache__
│ admin.cpython-37.pyc
│ api.cpython-37.pyc
│ models.cpython-37.pyc
│ serializers.cpython-37.pyc
│ urls.cpython-37.pyc
│ views.cpython-37.pyc
│ __init__.cpython-37.pyc
│
└───users
│ admin.py
│ api.py
│ apps.py
│ forms.py
│ models.py
│ serializers.py
│ tests.py
│ urls.py
│ views.py
│ __init__.py
│
├───migrations
│ │ 0001_initial.py
│ │ __init__.py
│ │
│ └───__pycache__
│ 0001_initial.cpython-37.pyc
│ 0002_customuser_starttime.cpython-37.pyc
│ __init__.cpython-37.pyc
│
└───__pycache__
admin.cpython-37.pyc
api.cpython-37.pyc
apps.cpython-37.pyc
forms.cpython-37.pyc
models.cpython-37.pyc
serializers.cpython-37.pyc
tests.cpython-37.pyc
urls.cpython-37.pyc
__init__.cpython-37.pyc
以上是需求和procfile。
web: gunicorn --pythonpath FatCatFish FatCatFish.wsgi --log-file -
--pythonpath pathToWSGIFile wsgiFile