django.core.exceptions.ImproperlyConfigured: 无法加载 WSGI 应用程序“{project_name}.wsgi.application”;导入模块时出错
django.core.exceptions.ImproperlyConfigured: WSGI application '{project_name}.wsgi.application' could not be loaded; Error importing module
我不明白为什么我在 运行 宁 Heroku 运行 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 有什么问题。
您的 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')
根据documentation
,中间件配置应该是这样的:
MIDDLEWARE = [
<b>'django.middleware.security.SecurityMiddleware',
'whitenoise.middleware.WhiteNoiseMiddleware',</b>
'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 文件中删除与 whitenoise 相关的行:
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文件。
我不明白为什么我在 运行 宁 Heroku 运行 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 有什么问题。
您的 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')
根据documentation
,中间件配置应该是这样的:
MIDDLEWARE = [
<b>'django.middleware.security.SecurityMiddleware',
'whitenoise.middleware.WhiteNoiseMiddleware',</b>
'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 文件中删除与 whitenoise 相关的行:
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文件。