部署到Heroku时将DEBUG = False更改导致500错误

4

我正在使用 Django 1.9Python 3.4.3

注意:Django 管理页面也会出现 500 错误。有些其他帖子报告在管理页面上没有得到这个错误,而我是有的。我也尝试了这篇文章中的所有方法。

更改我的应用程序中的 DEBUG = False 后,我的应用程序的所有页面都会出现 500 错误。
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/1.8/howto/static-files/

STATICFILES_STORAGE = 'whitenoise.django.GzipManifestStaticFilesStorage'

STATIC_URL = '/static/'

STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')

STATICFILES_DIRS =(
    os.path.join(BASE_DIR, 'static'),
)

MEDIA_URL = '/media/'

MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

Apache日志显示的错误是什么? - markwalker_
你能否发布一下当你push你的应用程序时Heroku返回的内容?我猜测你的静态文件可能出现了混淆,导致应用程序没有被部署。 - Ben
你运行了他们推荐的命令吗?heroku run python manage.py collectstatic --noinput - Ben
啊,我刚看到你的应用程序中有“whitenoise”。我从来没有让它正常工作过。将其注释掉并重新运行,看看是否可以解决问题。 - Ben
让我们在聊天中继续这个讨论 - Ben
显示剩余3条评论
3个回答

3

如果将ADMINS添加到设置中会更好:

ADMINS = (('Your name', 'Your@EMAIL'),)

这样当错误发生时,您将收到更好的报告,可以用来调试错误。

希望对您有所帮助。


@ groovietunes 设置管理员后,您将收到一封电子邮件,其中包含您通常在“DEBUG = True”时看到的回溯。 - Ben
@Ben 谢谢你的建议,我已经将回溯结果添加到问题的末尾。我开始有一种印象,也许我的静态文件在生产环境中没有正确配置,但这并不合理,因为我仍然收到500错误。 - Groovietunes

3
您可能忘记在settings.py MIDDLEWARE设置中包含whitenoise中间件。请编辑您的settings.py文件,并将WhiteNoise添加到MIDDLEWARE_CLASSES列表中,除了Django的SecurityMiddleware之外的所有其他中间件之上。
MIDDLEWARE_CLASSES = [
# 'django.middleware.security.SecurityMiddleware',
'whitenoise.middleware.WhiteNoiseMiddleware',
#...
]

当DEBUG=True时,这是不必要的,但是当DEBUG=False时,问题就会突然出现。不幸的是,Heroku在他们的文档中没有包括这个中间件的添加,并且他们的演示应用程序运行在DEBUG=True模式下,所以很难找到这个问题。

在whitenoise文档中可以找到更多信息:http://whitenoise.evans.io/en/stable/django.html

按照逐步设置来查看您缺少什么。Heroku文档往往省略了中间件的添加--这会导致错误--也许您的应用程序还缺少其他东西。


2
白噪声正在寻找它找不到的东西。我也遇到了这个问题,但从未使其工作。根据您有多少静态文件,决定是否真正需要缓存它们。如果不需要,请省略它。
如果需要,请找到白噪声正在尝试查找的内容并提供给它。也许这可以帮助您: https://dev59.com/O4fca4cB1Zd3GeqPk5hK#28385055

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接