use*_*453 7 python deployment django heroku gunicorn
I'm trying to deploy a Django app using Heroku, but I'm running into the following error: "ImportError: No module named myproject.wsgi".
My project is configured as such:
my-project
? Procfile
? requirements.txt
? runtime.txt
? README.md
?
????myproject
? ? db.sqlite3
? ? django
? ? django._file_
? ? import
? ? manage.py
| |
? ????myproject
| | | wsgi.py
| | | settings.py
| | | urls.py
| | | _init_.py
| | |
| | ????_pycache_
| |
? ????venv
...
Run Code Online (Sandbox Code Playgroud)
My wgsi.py file is configured as such:
import os
import signal
import sys
import traceback
import time
from django.core.wsgi import get_wsgi_application
from whitenoise.django import DjangoWhiteNoise
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myproject.settings")
application = get_wsgi_application()
application = DjangoWhiteNoise(application)
Run Code Online (Sandbox Code Playgroud)
My Procfile contains the following:
web: gunicorn myproject.wsgi:application --log-file -
Run Code Online (Sandbox Code Playgroud)
Why is this producing an error?
看来您的运行目录是最外面的my-project. 尝试更改您的 WSGI 应用程序路径,gunicorn myproject.myproject.wsgi:application --log-file -然后查看错误是否发生变化。
我认为将您的项目放在根目录中(即删除第一个myproject目录并将您manage.py的my-project目录放入目录中)是 Heroku 的要求,它将解决您的问题。
我最终使用 Gunicorn 的 chdir 标志修复了这个问题,据我所知,它本质上让你假装你正在从另一个目录运行 Gunicorn。很有用,例如,heroku 尝试从一个“太低”的目录运行gunicorn。
要在这里使用它,您需要在 Procfile 中使用:
web: gunicorn --chdir myproject myproject.wsgi:application --log-file -
Run Code Online (Sandbox Code Playgroud)
即你需要新的:
--chdir myproject
Run Code Online (Sandbox Code Playgroud)