Gunicorn/Django, ImportError: No module named application.wsgi

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?

Arm*_*ani 6

看来您的运行目录是最外面的my-project. 尝试更改您的 WSGI 应用程序路径,gunicorn myproject.myproject.wsgi:application --log-file -然后查看错误是否发生变化。

我认为将您的项目放在根目录中(即删除第一个myproject目录并将您manage.pymy-project目录放入目录中)是 Heroku 的要求,它将解决您的问题。


ada*_*dam 5

我最终使用 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)