Whitenoise应该自动压缩静态文件吗?怎么样?

时间:2017-11-30 17:25:51

标签: django heroku gzip static-files whitenoise

我最近为我的Django项目启用了Whitenoise,该项目将在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是否包含此内容?如果确实如此,有没有人知道我可能会遗漏或做错什么?我真的很喜欢这种能力(如上面文档中所宣传的那样)来保持所有内容永远缓存

2 个答案:

答案 0 :(得分:1)

运行collectstatic管理命令时自动完成压缩。该命令由Heroku运行,作为构建过程的一部分,因此您不需要做任何其他事情来获得压缩支持。

如果您想在本地测试它,您需要自己运行collectstatic,然后使用DEBUG = False运行您的应用,以获得与生产中相同的行为。

答案 1 :(得分:1)

在我的情况下,这是由我的Django设置引起的
STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'
因为{.css文件中引用的字体文件不存在,collectstatic处理失败。

此错误停止了整个过程,因此没有生成压缩文件。

解决方案
切换到STATICFILES_STORAGE = 'whitenoise.storage.CompressedStaticFilesStorage'

注意:不存在的文件导致错误的问题实际上出在Django的ManifestStaticFilesStorage上,而不是WhiteNoise。