当 Debug=False 时 Django Heroku 不提供静态文件

Posted

技术标签:

【中文标题】当 Debug=False 时 Django Heroku 不提供静态文件【英文标题】:Django Heroku not serving static files when Debug=False 【发布时间】:2019-06-01 06:32:55 【问题描述】:

我在 Heroku 上托管我的 Django 应用程序,并使用 whitenoise 来处理静态文件。

以下是settings.py

的内容
DEBUG = False

ALLOWED_HOSTS += [
    'example.com',
]

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'whitenoise.middleware.WhiteNoiseMiddleware',
    ...
]

STATIC_URL = '/static/'

STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'static_my_project')
]

STATIC_ROOT = os.path.join(BASE_DIR, 'static_cdn', 'static_root')

但静态文件不起作用。

设置Debug=True 提供静态文件,但在Debug=False 时不提供。

【问题讨论】:

【参考方案1】:

Whitenoise 中间件应该来自after the security middleware and before all other middleware。您目前正在将其添加到末尾。

【讨论】:

如果您尝试过,请更新您的原始问题以显示当前代码。确保您已提交并推送更改。【参考方案2】:

从post 获得解决方案

collectstatic 添加到Procfile

web: python manage.py collectstatic --no-input; gunicorn myapp.wsgi --log-file - --log-level debug

现在每个静态文件都在提供服务,包括 CSS、js、图像和视频。

【讨论】:

以上是关于当 Debug=False 时 Django Heroku 不提供静态文件的主要内容,如果未能解决你的问题,请参考以下文章

当 DEBUG=False 时,我的 Django 管理面板给出服务器错误(500)

为啥当 Debug 设置为 False 时,Django 会为静态媒体生成 HTTP 500 错误?

Django Elasticbeanstalk:当 Debug = False 时无法访问静态文件

当 Debug=False 时 Django Heroku 不提供静态文件

当 debug=false 时 Django 媒体文件不起作用

当 DEBUG = False(产品)时,Django 管理错误(总是需要登录几次)