Стоит ли Whitenoise автоматически сжимать статические файлы? Как?
Недавно я включил Whitenoise для моего проекта Django, который будет работать на Heroku. Я хочу, чтобы Whitenoise автоматически сжимал мои статические файлы, как это представляется возможным из этой части документов: http://whitenoise.evans.io/en/stable/django.html
Однако после добавления следующего в мои настройки:
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
Должен ли я просто добавить какой-нибудь скрипт в процесс сборки, чтобы gzip все, или Whitenoise включает это? Если да, кто-нибудь знает, что мне не хватает или я делаю неправильно? Мне бы очень хотелось, чтобы (как указано в документации выше) была возможность хранить все в кэше навсегда
2 ответа
Сжатие выполняется автоматически, когда collectstatic
команда управления запущена. Эта команда запускается Heroku как часть процесса сборки, поэтому вам не нужно больше ничего делать, чтобы получить поддержку сжатия.
Если вы хотите проверить это локально, вам нужно будет запустить collectstatic
себя, а затем запустите свое приложение с DEBUG = False
чтобы получить то же поведение, что и в производстве.
В моем случае это было вызвано настройкой DjangoSTATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'
поскольку collectstatic
процесс не выполнен из-за несуществующего файла шрифта, на который есть ссылка в файле.css.
Эта ошибка остановила весь процесс, поэтому сжатые файлы не были созданы.
Решение
Переключиться на STATICFILES_STORAGE = 'whitenoise.storage.CompressedStaticFilesStorage'
Примечание: проблема с несуществующими файлами, вызывающими ошибки, действительно связана с Django ManifestStaticFilesStorage
не с WhiteNoise.