繁体   English   中英

Heroku Django 应用程序未加载静态文件(404 Not Found)

[英]Heroku Django app not loading static files (404 Not Found)

我一直在尝试将 django 应用程序部署到 heroku。 但是,它无法获取静态文件。 我在collecstatic上运行了collecstatic ,应用程序的根目录中有一个static文件夹,其中包含正确的文件: ~/static/rest_framework/css/bootstrap.min.css

设置.py:

STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')

卷曲:

curl 'https://xxx.herokuapp.com/static/rest_framework/css/bootstrap.min.css' \
-XGET \
-H 'Referer: https://xxx.herokuapp.com/users/login' \
-H 'Accept: text/css,*/*;q=0.1' \
-H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/604.4.7 (KHTML, like Gecko) Version/11.0.2 Safari/604.4.7'

我花了几个小时才弄清楚这一点。 @VipinMohan 解决方案适用于白噪声<4。 但是,在版本 4+ 中,WhiteNoise 删除了一些在之前的主要版本中已弃用的选项。 为了记录,我使用的是 Django 2.1。

文档

WhiteNoise 中间件应该直接放在 Django SecurityMiddleware 之后(如果你正在使用它)和所有其他中间件之前。

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

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
     # the next line of code is the one that solved my problems
    'whitenoise.middleware.WhiteNoiseMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware'
]

请注意所提供链接部分中的注意事项。

您可能会发现其他第三方中间件建议它应该在中间件列表的顶部获得最高优先级。 除非您完全了解正在发生的事情,否则您应该忽略此建议并始终将 WhiteNoiseMiddleware 置于其他中间件之上

Django 不支持在生产中提供静态文件。 但是,出色的WhiteNoise项目可以集成到您的 Django 应用程序中,并且正是为此目的而设计的。

pip install whitenoise    

将白噪声添加到您的 requirements.txt 在 app/wsgi.py 中添加此代码

from whitenoise.django import DjangoWhiteNoise
application = DjangoWhiteNoise(application)

将 collectstatic 添加到 Procfile

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

感谢这个堆栈溢出答案

如果您使用 v4.0 或更高版本,则应更改 WhiteNoise 配置。 请参考这个whitenoise-changelog

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM