Heroku部署Django应用执行collectstatic命令报错如何解决?
错误原因
- 你的CSS文件中对FontAwesome字体文件的引用使用了绝对路径
/webfonts/xxx.eot,Django在处理静态文件哈希重命名时,会尝试解析该路径,直接定位到项目根目录下的webfonts文件夹,而该文件夹不在STATIC_ROOT指定的staticfiles目录范围内,触发了Django的路径安全校验,抛出异常。 - 你手动配置的静态文件参数被
django_heroku自动覆盖:django_heroku.settings(locals())默认会自动重写STATIC_ROOT、STATIC_URL等静态相关配置,你将该行放在静态配置之后,导致自己写的配置全部失效。
解决方案
- 修正字体引用路径
找到项目中引入FontAwesome的CSS文件,将所有/webfonts/开头的路径调整为相对路径../webfonts/,或者直接改为/static/webfonts/,确保路径指向static目录下的webfonts文件夹。如果不想修改CSS,也可以直接将static目录下的webfonts文件夹移动到项目根目录。 - 调整settings.py配置
修改django_heroku调用语句,添加参数禁止其覆盖静态配置:django_heroku.settings(locals(), staticfiles=False) - 补充WhiteNoise中间件(必须)
Heroku部署Django需要用WhiteNoise处理静态文件,在MIDDLEWARE列表的第一行(django.middleware.security.SecurityMiddleware之后)添加如下配置:'whitenoise.middleware.WhiteNoiseMiddleware', - 本地验证
修复完成后先在本地执行python manage.py collectstatic --noinput,确认无报错后再重新推送到Heroku即可。
如果需要临时紧急部署,可执行命令heroku config:set DISABLE_COLLECTSTATIC=1关闭自动静态文件收集,该方案仅作为临时应急使用,不推荐长期启用。
内容的提问来源于stack exchange,提问作者Neha AK
相关产品推荐
相关产品推荐

