我最近启用了我的django项目,该项目将在Heroku上运行。我希望Whitenoise自动压缩我的静态文件,这似乎是从文档的这一部分开始的:http://whitenoise.evans.io/en/stable/django.html#add-compression-and-caching-support
但是,将以下内容添加到我的设置之后:
STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'
我发现我的文件没有压缩!
curl -H "Accept-Encoding: gzip" -I http://localhost:8080/static/app/js/auth.min.js
HTTP/1.0 200 OK
Date: Thu, 30 Nov 2017 17:14:27 GMT
Server: WSGIServer/0.2 CPython/3.5.2
Last-Modified: Thu, 30 Nov 2017 01:45:33 GMT
Content-Length: 103648
Content-Type: application/javascript; charset="utf-8"
Cache-Control: max-age=0, public
Access-Control-Allow-Origin: *
但是,如果我手动gzip我的一个文件,一切都起作用,只需peachy
$ gzip ../app/static/app/js/auth.min.js
$ curl -H "Accept-Encoding: gzip" -I http://localhost:8080/static/app/js/auth.min.js
HTTP/1.0 200 OK
Date: Thu, 30 Nov 2017 17:21:47 GMT
Server: WSGIServer/0.2 CPython/3.5.2
Last-Modified: Thu, 30 Nov 2017 17:14:53 GMT
Content-Type: application/javascript; charset="utf-8"
Cache-Control: max-age=0, public
Access-Control-Allow-Origin: *
Vary: Accept-Encoding
Content-Encoding: gzip
Content-Length: 21870
我是否只需要在我的构建过程中添加一些脚本来gzip,还是whitenoise包括这个?如果这样做,有人知道我可能会想念或做错什么吗?我真的希望能够(如上文档中宣传的那样)将所有内容永远缓存
在我的情况下,这是由我的django设置引起的
STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'
因为collectstatic
进程由于在.css文件中引用的不存在字体文件而失败。
此错误停止了整个过程,因此没有产生压缩文件。
解决方案
切换到STATICFILES_STORAGE = 'whitenoise.storage.CompressedStaticFilesStorage'
注意:不存在文件的问题确实在于Django的ManifestStaticFilesStorage
,而不是使用Whitenoise。
运行collectstatic
管理命令时自动完成压缩。该命令是由Heroku作为构建过程的一部分运行的,因此您不需要做任何其他事情来获得压缩支持。
如果您想在本地进行测试,则需要自己运行collectstatic
,然后使用DEBUG = False
运行您的应用程序,以获得与生产中相同的行为。