[英]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.