Я запускаю автоматические сборки на CircleCI приложения для реагирования. И шаг включает в себя запуск npm run build и последующее копирование в корзину S3 для размещения сборок. Я вижу, что s3cmd копирует файлы *.css в мою корзину S3 с неправильным типом MIME (text/plain) и что при обслуживании это приводит к тому, что веб-приложение не работает.
Я запускаю s3cmd версии 2.0.2 как локально на моем Mac (homebrew), так и на CircleCI (работаю внутри контейнера nodejs, устанавливается с помощью установки pip, setuptools и установки s3cmd через sudo python setup.py install).
При локальном запуске на моем Mac я развертываю свое приложение следующим образом:
s3cmd put --recursive -P dist/* s3://$BUCKET
На CircleCI я запускаю ту же команду. Я также пробовал опцию --guess-mime-type, которая, похоже, не действует.
Я неправильно определяю тип MIME следующим образом:
$ s3cmd info s3://$BUCKET/$DEPLOY/static/css/main.a0a90112.css | grep MIME
MIME type: text/plain
Когда я запускаю ту же команду после развертывания с моего локального компьютера, я получаю MIME-тип CSS.
Так что я делаю не так?
Это похоже на давнюю ошибку s3cmd с угадыванием неправильного типа MIME с помощью python-magic: <github.com/s3tools/s3cmd/issues/198> <github.com/s3tools/s3cmd/issues/376> <github.com/s3tools/s3cmd/issues/643>. Помогает ли добавление --no-mime-magic?





У меня была эта проблема с s3cmd rsync (не s3cmd put, как в вопросе), установив файлы с расширением .css как тип mime-типа text/plain. Благодаря приведенному выше комментарию и связанным с ним проблемам это исправило:
s3cmd sync --no-mime-magic --guess-mime-type ...
С использованием
s3 put ...
Вы можете загрузить все свои файлы, кроме css, с помощью
--guess-mime-type --no-mime-magic --exclude "*.css"
И тогда вы загружаете только css с принудительным mime-типом
-m "text/css" --exclude "*" --include "*.css"
Последующие действия - я до сих пор не понимаю, почему s3cmd делает это, и это похоже на ошибочное поведение, но это можно исправить вручную, выполнив проверку с помощью
s3cmd modify "s3://$BUCKET/$SUBDIR/static/css/*.css" --mime-type = "text/css"