Python WhiteNoise не сжимает gzip в приложении Flask - PullRequest
0 голосов
/ 23 мая 2018

Я использовал WhiteNoise в своем Flask/Python3 приложении, где gunicorn являлся веб-сервером следующим образом:

from whitenoise import WhiteNoise

app = Flask(__name__, static_folder='static')
app.wsgi_app = WhiteNoise(app.wsgi_app, root='static/')
app.wsgi_app.add_files(app.static_folder)

Я даже пытался создать static_folder в Flask object и добавить его позжена дополнительные WhiteNoise файлы, но это тоже не сработало.Он компилируется нормально, но когда я делаю:

curl -i -H "Accept-Encoding: gzip" https://my-homepage/static/css/my.css

я получаю следующий ответ:

HTTP/1.1 200 OK
Connection: keep-alive
Server: gunicorn/19.8.1
Date: Wed, 23 May 2018 09:53:38 GMT
Content-Length: 50162
Content-Type: text/css; charset=utf-8
Last-Modified: Wed, 23 May 2018 09:51:21 GMT
Cache-Control: public, max-age=43200
Expires: Wed, 23 May 2018 21:53:38 GMT
Etag: "1527069081.0-50162-130551313"
Accept-Ranges: bytes
Strict-Transport-Security: max-age=31536000
Via: 1.1 vegur

Вы можете увидеть, что Content-Encoding: gzip не присутствует.Чего мне не хватает?

Ответы [ 2 ]

0 голосов
/ 23 мая 2018

Я нашел решение после нескольких попыток.Кажется, что документация WhiteNoise немного устарела и не упоминает все.

Я изменил строку с:

app.wsgi_app = WhiteNoise(app.wsgi_app, root='static/')

на:

app.wsgi_app = WhiteNoise(app.wsgi_app, root=os.path.join(os.path.dirname(__file__), 'static'), prefix='static/')

Прежде всего, требуется параметр prefix (не упомянут в документации), и, кроме того, приложение Flask не знает, как обрабатывать путь 'static/', поэтому необходимо указать абсолютный путь.

0 голосов
/ 23 мая 2018

Вы должны использовать утилиту командной строки поставляется с WhiteNoise, чтобы выполнить сжатие самостоятельно.

Цитировать

WhiteNoise поставляется с утилитой командной строки, которая будетсоздавать сжатые версии ваших файлов для вас.

$ python -m whitenoise.compress --help
usage: compress.py [-h] [-q] [--no-gzip] [--no-brotli]
                   root [extensions [extensions ...]]

Search for all files inside <root> *not* matching <extensions> and produce
compressed versions with '.gz' and '.br' suffixes (as long as this results in
a smaller file)

positional arguments:
  root         Path root from which to search for files
  extensions   File extensions to exclude from compression (default: jpg,
               jpeg, png, gif, webp, zip, gz, tgz, bz2, tbz, swf, flv, woff,
               woff2)

optional arguments:
  -h, --help   show this help message and exit
  -q, --quiet  Don't produce log output
  --no-gzip    Don't produce gzip '.gz' files
  --no-brotli  Don't produce brotli '.br' files

Вы можете либо запустить его во время разработки и зафиксировать сжатые файлы в своем хранилище, либо запустить как часть процессов сборки и развертывания.

...