4

我最近为将在 Heroku 上运行的 Django 项目启用了 Whitenoise。我希望 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 我的一个文件,一切正常

$ 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

我是否只需要在我的构建过程中添加一些脚本来压缩所有内容,或者 Whitenoise 是否包含这个?如果是这样,有没有人知道我可能遗漏了什么或做错了什么?我真的很希望能够永久保存所有内容(如上面的文档中所宣传的那样)

4

2 回答 2

3

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

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

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

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

于 2018-10-15T16:26:42.650 回答
1

collectstatic运行管理命令时会自动完成压缩。该命令由 Heroku 作为构建过程的一部分运行,因此您无需执行任何其他操作即可获得压缩支持。

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

于 2017-11-30T21:33:07.900 回答