我尝试使用Heroku部署Django应用,但遇到以下错误:"导入错误:没有名为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
...
我的www.example.com文件配置如下: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)
我的过程文件包含以下内容:
web: gunicorn myproject.wsgi:application --log-file -
为什么会产生错误?
4条答案
按热度按时间uyto3xhc1#
您的运行目录似乎是最外层的
my-project
。尝试更改您的WSGI应用程序路径,如gunicorn myproject.myproject.wsgi:application --log-file -
,并查看错误是否改变。我认为将您的项目放在根目录中(即删除第一个
myproject
目录,并将您的manage.py
放在my-project
目录中)是Heroku的要求,将解决您的问题。qcuzuvrc2#
最后我用gunicorn的chdir标志修复了这个问题,据我所知,chdir标志本质上是让你假装你正在从另一个目录运行gunicorn,这在heroku试图从一个目录运行gunicorn时很有用。
要在这里使用它,您可以在Procfile中使用:
例如,您需要新的:
hmmo2u0o3#
扩展上述答案,我尝试了我的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')
它对我来说就像一个护身符!
nqwrtyyt4#
我在requirements.txt中添加了gunicorn==20.1.0,它修复了这个问题。