Мои CSS-файлы не загружаются из моего хранилища S3, почему?

#django #amazon-web-services #amazon-s3

Вопрос:

Вот мои конфигурации S3:

 STATICFILES_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'
DEFAULT_FILE_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'
AWS_ACCESS_KEY_ID = os.environ.get('AWS_ACCESS_KEY_ID')
AWS_SECRET_ACCESS_KEY = os.environ.get('AWS_SECRET_ACCESS_KEY')
AWS_STORAGE_BUCKET_NAME = os.environ.get('AWS_STORAGE_BUCKET_NAME')
AWS_QUERYSTRING_AUTH = False
 

У меня есть пара моделей с полями изображений, и когда я загружаю изображение, оно правильно загружается в мою корзину S3.

Но я также хочу поместить туда свои статические файлы (JS, CSS). Я вручную создал папку в корневой папке моего хранилища S3 под названием static и загрузил все свои файлы CSS, JS в эту папку с помощью веб-приложения S3.

Однако в моем шаблоне я просто делаю {% статический ‘css/main.css’%}, и файл не загружается.

Я использовал инструмент проверки Chrome, чтобы проверить, какие ресурсы загружаются, и я думаю, что он подключается к моей корзине S3, но приносит файл, который я хочу, пустым, поэтому он по какой-то причине не загружается.

введите описание изображения здесь

Ответ №1:

Вам придется дважды проверить, настроили ли вы политику корзины в своей корзине S3, разрешающую публичное чтение объектов, а также отключить блокировку общего доступа на вкладке разрешения. По умолчанию ваше хранилище является закрытым без публичного доступа, что означает, что ваше веб-приложение не может его видеть. Если это уже настроено, вам придется проверить и включить CORS, потому что Django пытается получить доступ к вашим статическим файлам из другого домена

Комментарии:

1. Я все это проверил. Я выяснил эту проблему. Всякий раз, когда я загружаю файл, он загружается идеально, но возвращает мне неверный URL-адрес. Он возвращает тот, в котором нет моего региона, когда я добавляю регион, все работает, но как бы я добавил свой регион, чтобы хранилища django обрабатывали его правильно? Я попробовал AWS_S3_REGION_NAME, но это не сработало. Я нахожусь в регионе me-юг-1

2. Я рад, что у вас получилось, по умолчанию AWS использует us-east-1 в качестве названия региона. Поэтому, если он находится в любом другом регионе, кроме этого, вам придется добавить правильный регион.