【问题标题】:django.core.exceptions.ImproperlyConfigured: WSGI application '{project_name}.wsgi.application' could not be loaded; Error importing moduledjango.core.exceptions.ImproperlyConfigured:无法加载 WSGI 应用程序“{project_name}.wsgi.application”;导入模块出错
【发布时间】:2019-06-16 18:10:26
【问题描述】:

我不明白为什么我在运行 Heroku 时遇到错误 run python manage.py runserver

我尝试更改文件夹名称,并尝试在MIDDLEWARE 中删除和添加WhiteNoise

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    # 'django.middleware.security.SecurityMiddleware',
    # 'whitenoise.middleware.WhiteNoiseMiddleware',
]

数据库设置

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}

django_heroku.settings(locals())

wsgi.py

​​>
import os

from django.core.wsgi import get_wsgi_application
from whitenoise.django import DjangoWhiteNoise

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'ss.settings')

application = get_wsgi_application()
application = DjangoWhiteNoise(application)

至少服务器应该运行,这样我才能看到 Heroku 的问题。

【问题讨论】:

    标签: django heroku wsgi


    【解决方案1】:

    按照documentation,中间件配置应该是这样的:

    MIDDLEWARE = [
        'django.middleware.security.SecurityMiddleware',
        'whitenoise.middleware.WhiteNoiseMiddleware',
        'django.middleware.csrf.CsrfViewMiddleware',
        'django.contrib.sessions.middleware.SessionMiddleware',
        'django.middleware.common.CommonMiddleware',
        'django.contrib.auth.middleware.AuthenticationMiddleware',
        'django.contrib.messages.middleware.MessageMiddleware',
        'django.middleware.clickjacking.XFrameOptionsMiddleware',
    ]

    您也可以从 wsgi 文件中删除与白噪声相关的行:

    import os
    
    from django.core.wsgi import get_wsgi_application
    #  from whitenoise.django import DjangoWhiteNoise
    
    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'ss.settings')
    
    application = get_wsgi_application()
    #  application = DjangoWhiteNoise(application)
    

    因为在whitenoise >= 4.0,所以不需要修改wsgi文件。

    【讨论】:

    • @rudra 我实际上试图在 heroku 中托管这个应用程序,试图弄清楚为什么我会收到这个错误
    • 这行可能会抛出错误from whitenoise.django import DjangoWhiteNoise,因为它不再存在
    • 是的,现在会尝试,但这对于托管应用程序 heroku 很重要,对吧?
    • whitenoise 负责提供静态文件,如果你不需要提供 js/css/img(静态文件) 那么你现在可以省略它。
    • 是的,它工作得很好,但现在我也需要提供静态文件,请你告诉我该怎么做
    【解决方案2】:

    您的wsgi.py 文件不正确。

    os.environ.setdefault('DJANGO_SETTINGS_MODULE', '{{PROJECT}}.settings')

    上面的代码是问题所在,您需要将{{ project }} 替换为您的实际应用名称。

    这是settings.py所在的文件夹名称。

    例如,如果这是您的项目结构。

    blog
          ...
        - settings.py
        - wsgi.py
          ...
    

    那么正确的代码是os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'blog.settings')

    【讨论】:

    • 我刚才提到了{{project}}作为例子
    • 你为什么不提这个?请更新您的代码以显示所有 settings.py 和完整的回溯以及正确的项目名称
    猜你喜欢
    • 2019-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-17
    • 2023-03-06
    • 1970-01-01
    • 2013-03-13
    相关资源
    最近更新 更多