【问题标题】:Deploying to heroku changing DEBUG = False results in 500 error部署到 heroku 更改 DEBUG = False 导致 500 错误
【发布时间】:2026-01-10 23:40:01
【问题描述】:

我正在使用 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

标签: python django heroku


【解决方案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

    【讨论】: