Я размещаю общедоступные статические ресурсы в ковше хранилища google, и я хочу использовать команду gsutil rsync
для синхронизации нашей локальной версии с ведром, экономя пропускную способность и время. Часть нашего процесса сборки состоит в том, чтобы предварительно загрузить эти ресурсы, но gsutil rsync
не имеет возможности установить заголовок Content-Encoding
. Это означает, что мы должны запустить gsutil rsync
, а затем сразу запустите gsutil setmeta
, чтобы установить заголовки для всех типов файлов gzipped. Это оставляет ведро в состоянии BAD до тех пор, пока этот заголовок не будет установлен. Другой вариант - использовать gsutil cp
, передавая параметр -z, но это требует от нас повторной загрузки всей структуры каталога каждый раз, и это включает в себя множество файлов изображений и других ресурсов без gzip, которые теряют время и пропускную способность.gsutil rsync с сжатием gzip
Есть ли атомный способ выполнить rsync и установить правильные заголовки Content-Encoding?
Проблемы есть только текст на основе файлы сжаты, как CSS, JS, HTML и т.д. – regretoverflow
Есть атомный способ сделать это на основе на расширение файла? Я действительно не вижу возможности. Что было бы хорошим дополнением к gsutil rsync, так это передать список расширений файлов, к которым может применяться заголовок во время rsync. Например, единственными файлами, которые обычно кодируются gzip, являются html, css, js, json, xml, svg, txt. Это из конфигурации apache для дефляции: https://httpd.apache.org/docs/current/mod/mod_deflate.html – regretoverflow
Мы решили не поддерживать сжатие «на лету» с помощью команды rsync, потому что для правильного выполнения этого потребовалось бы отслеживание предварительно сжатого размера и контрольной суммы (ов) в метаданных объекта и может привести к запутанным ситуациям, если клиенты попытаются выполнить синхронизацию с несколькими источниками. В принципе, если вы хотите сжимать «на лету», вам нужно использовать команду gsutil cp. –