[英]Gunicorn/Django, ImportError: No module named application.wsgi
我正在尝试使用 Heroku 部署 Django 应用程序,但遇到以下错误:“ImportError:没有名为 myproject.wsgi 的模块”。
我的项目配置如下:
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
...
我的 wgsi.py 文件配置如下:
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)
我的 Procfile 包含以下内容:
web: gunicorn myproject.wsgi:application --log-file -
为什么会产生错误?
看来您的运行目录是最外面的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 -
即你需要新的:
--chdir myproject
扩展上面的答案,我尝试了我的 WSGI 路径到gunicorn myproject.myproject.wsgi:application --log-file -
现在是错误更改为ImportError: No module named myproject.settings
。 为了解决这个问题,我更改了我的 wsgi 文件。
发件人:
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings')
致:
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.myproject.settings')
它对我来说就像一个魅力一样醒来!
我将 gunicorn==20.1.0 添加到 requirements.txt 并解决了问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.