Whitenoise应该自动压缩静态文件?如何



我最近启用了我的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运行您的应用程序,以获得与生产中相同的行为。

最新更新