部署到 heroku 更改 DEBUG = False 导致 500 错误

Posted

技术标签:

【中文标题】部署到 heroku 更改 DEBUG = False 导致 500 错误【英文标题】:Deploying to heroku changing DEBUG = False results in 500 error 【发布时间】:2016-03-12 16:07:34 【问题描述】:

我正在使用 Django 1.9Python 3.4.3。 在我的应用程序上更改 DEBUG = False 时,我在应用程序的所有页面上都收到 500 错误。

注意:Django 管理页面也会导致 500 错误。一些 其他帖子报告在管理页面上没有收到此错误,我是。我也尝试了post中的所有内容

# 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 日志说错误实际上是什么? @marksweb 我将日志编辑成问题,它没有说太多 当你push你的应用程序时,你能发布什么heroku回复吗?我敢打赌,您的静态文件有些东西弄糊涂了,并且实际上并未部署该应用程序。 @Ben 确定。我将它附加到日志的末尾 您是否运行了他们推荐的命令? heroku run python manage.py collectstatic --noinput 【参考方案1】:

如果你在设置中添加管理员会更好:

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

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

希望对你有帮助

【讨论】:

@groovietunes 设置管理员后,您将收到一封电子邮件,其中包含您通常在DEBUG=True 时看到的回溯。 @Ben 感谢我将回溯结果添加到问题末尾的建议。我开始觉得我的静态文件可能没有正确配置用于生产,但这对于我为什么会收到 500 错误没有意义【参考方案2】:

您可能忘记在 settings.py MIDDLEWARE 设置中包含 whitenoice 中间件。编辑您的 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 文档倾向于省略中间件添加(这会导致错误),并且您的应用程序可能还缺少其他一些东西。

【讨论】:

【参考方案3】:

Whitenoise 正在寻找它找不到的东西。我也有这个问题,但从来没有让它工作。根据你有多少静态文件,决定你是否真的需要缓存它们。

如果您不这样做,请忽略它。 如果你这样做了,你需要找到 whitenoise 试图找到的东西并给出它。也许这有帮助:https://***.com/a/28385055/1322179

【讨论】:

以上是关于部署到 heroku 更改 DEBUG = False 导致 500 错误的主要内容,如果未能解决你的问题,请参考以下文章

从 github 部署更改的模型时,如何在 heroku 上运行 makemigrations/migrate?

数据库更改时,Heroku 部署的 Django 网页不会更新

将预先存在的 django git repo 部署到 heroku

在部署到 Heroku 之前,我应该对 MERN 应用程序的 package.json 文件的脚本进行哪些更改?

为啥我的静态文件在部署到 Heroku 服务器时没有提供? (姜戈)

如何更新使用 GitHub“部署到 Heroku”按钮创建的 Heroku 应用程序?