Python 白噪声和/或静态文件导致服务器错误(500)
当DEBUG=True时,我可以将我的应用程序(通过Django)部署到Heroku,但当DEBUG=False时,我会收到一个服务器错误。我认为这与我如何设置静态文件有关。当我注释掉“STATICFILES\u STORAGE='whitenoise.django.GzipManifestStaticFilesStorage'”时,我没有收到错误消息,但该站点完全未格式化。以下是相关的settings.py代码:Python 白噪声和/或静态文件导致服务器错误(500),python,django,heroku,Python,Django,Heroku,当DEBUG=True时,我可以将我的应用程序(通过Django)部署到Heroku,但当DEBUG=False时,我会收到一个服务器错误。我认为这与我如何设置静态文件有关。当我注释掉“STATICFILES\u STORAGE='whitenoise.django.GzipManifestStaticFilesStorage'”时,我没有收到错误消息,但该站点完全未格式化。以下是相关的settings.py代码: INSTALLED_APPS = [ ... 'django.c
INSTALLED_APPS = [
...
'django.contrib.staticfiles',
...
]
ALLOWED_HOSTS = ['*']
PROJECT_ROOT = os.path.dirname(os.path.abspath(__file__))
STATIC_ROOT= os.path.join(PROJECT_ROOT, 'staticfiles')
STATIC_URL = '/static/'
STATICFILES_STORAGE = 'whitenoise.django.GzipManifestStaticFilesStorage'
STATICFILES_DIRS = (
os.path.join(PROJECT_ROOT, 'static'),
)
我在各种位置添加了我的静态文件夹(与settings.py相同的文件夹,在根文件夹中,等等),但都没有用
有什么想法吗?这些静态文件设置直接来自Heroku网站()。当我运行
python manage.py collectstatic
时,我得到一个关键错误“DATABASE\u URL”,我必须为其导出一个值,然后当我将文件推送到Heroku时,网站正常工作。您可能忘记了在settings.py中间件设置中包含whitenoice中间件。编辑settings.py文件并将WhiteNoise添加到中间件类列表中,除Django的SecurityMiddleware之外的所有其他中间件都是:
MIDDLEWARE_CLASSES = [
# 'django.middleware.security.SecurityMiddleware',
'whitenoise.middleware.WhiteNoiseMiddleware',
#...
]
更多信息可在whitenoise文档中找到:
一步一步地进行设置,看看您缺少了什么。Heroku文档倾向于忽略中间件的添加——这会导致错误——并且您的应用程序可能还缺少其他东西。运行python manage.py collectstatic
&再试一次,并包括错误内容,而不是500,设置DEBUG=False&trypython manage.py runserver
,&检查堆栈跟踪作为一般规则,您应该避免在生产中使用django runserver和StaticFile。您只能出于开发目的使用它们。不相关但很重要:为了安全起见,请在允许的\u主机设置中指定您实际使用的域。不要使用允许的\u HOSTS=['*']
,尽管这可能有点反模式。有关相关文档,请参阅。