【问题标题】:Gunicorn/Django, ImportError: No module named application.wsgiGunicorn/Django,ImportError:没有名为 application.wsgi 的模块
【发布时间】:2018-05-16 22:16:36
【问题描述】:

我正在尝试使用 Heroku 部署 Django 应用程序,但遇到以下错误:“ImportError: No module named 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 -

为什么会产生错误?

【问题讨论】:

    标签: python django heroku deployment gunicorn


    【解决方案1】:

    我最终使用 gunicorn 的 chdir 标志解决了这个问题,据我所知,它基本上让你假装你正在从另一个目录运行 gunicorn。有用的在这里 heroku 试图从一个“太低”的目录运行 gunicorn。

    要在此处使用它,您可以在 Procfile 中使用:

    web: gunicorn --chdir myproject myproject.wsgi:application --log-file -
    

    即你需要新的:

    --chdir myproject
    

    【讨论】:

    • 感谢您的建议!我有一个类似的问题,但我的是一个 ModuleNotFoundError,无论是在 Heroku 日志中还是在本地运行时。当我使用 --chdir 运行更新的命令时,这个解决方案让 gunicorn 从根目录本地运行服务器,万岁!看起来它是固定的。但是然后:当我在我的 Procfile 中更新该命令并将其推送到 Heroku 并尝试再次打开该应用程序时,它仍然因我原来的错误而崩溃:ModuleNotFoundError: No module named 'mysite.wsgi'。我是对的,这是从 root 运行的同一个问题的不同风格,还是完全不同的东西?
    【解决方案2】:

    扩展上面的答案我尝试了我的 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')

    它醒来对我来说就像一个魅力!

    【讨论】:

      【解决方案3】:

      看来你的运行目录是最外层的my-project。尝试更改您的 WSGI 应用程序路径,如 gunicorn myproject.myproject.wsgi:application --log-file - 并查看错误是否更改。

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

      【讨论】:

      • 我尝试了这两个选项,但是在尝试在线加载应用程序时,我收到一个应用程序错误,heroku logs 命令输出“at=error code=H10 desc="App crashed" method=GET path ="/"..."
      • __import__(module) File "/app/myproject/wsgi.py", line 20, in from django.core.wsgi import get_wsgi_application ImportError: No module named django.core.wsgi Worker exiting (pid: 9) Shutting down: Master 原因:Worker 无法启动。进程退出,状态为 3 状态从开始变为崩溃
      • @user6335453 似乎没有安装 Django(或者可能是错误的版本)。你的 Heroku 虚拟环境上安装了什么?
      • "django-admin --version" 和 "./manage.py --version" 都在 venv 中输出 "1.10.6"。
      猜你喜欢
      • 2015-01-18
      • 2018-10-23
      • 2019-12-01
      • 2020-05-04
      • 2018-07-28
      • 1970-01-01
      • 2015-04-24
      • 2017-06-30
      • 2012-10-21
      相关资源
      最近更新 更多