繁体   English   中英

Gunicorn/Django,ImportError:没有名为 application.wsgi 的模块

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM