Django - S3: collectstatic не создает новую папку, даже при наличии всех разрешений и привилегий на запись
Cursor ai назвал это "странной проблемой", так что мы возвращаемся к первоначальному источнику решений.
Я обновил django с версии 2.2 до версии 5.2, а также обновил свои хранилища, модули tinymce и т.д.
STORAGES = {
'staticfiles': {
'BACKEND': 'storages.backends.s3boto3.S3Boto3Storage',
'OPTIONS': {'location': 'static'},
},
'default': {
'BACKEND': 'storages.backends.s3boto3.S3Boto3Storage',
'OPTIONS': {'location': 'media'},
},
}
после обновления я добавил новое приложение, и в процессе разработки все работало хорошо. Проблема в том, что когда я запускаю collectstatic в рабочей среде, статические и мультимедийные файлы, которые уже были синхронизированы с предыдущими развертываниями, остаются доступными, но некоторые статические и мультимедийные подпапки / файлы из последних обновлений не загружаются - даже если все они имеют один и тот же корневой каталог статических и мультимедийных файлов. Как получается, что django-хранилища могут "выбирать" папки для создания в определенном статическом каталоге или каталоге мультимедиа?
я не уверен, какой еще код включить, чтобы объяснить это подробнее, но если кому-то нужно увидеть что-то еще, дайте мне знать, и я добавлю фрагменты кода. Спасибо.
Убедитесь, что ваш DEBUG = False Django сохраняет статические файлы в локальных файлах, а не загружает их на S3 в режиме разработки. Если это не так, пожалуйста, скройте свои учетные данные или любые частные реализации и загрузите полный код settings.py, чтобы сделать проблему более понятной. Ваша текущая реализация выглядит нормально для django 4.2 и более поздних версий.
Стандартная реализация должна выглядеть следующим образом:
DEBUG = False
ALLOWED_HOSTS = ['my-instance.us-east-1.elasticbeanstalk.com', '127.0.0.1']
AWS_STORAGE_BUCKET_NAME = "my-s3-bucket"
AWS_S3_REGION_NAME = "us-east-1"
AWS_S3_CUSTOM_DOMAIN = f'{AWS_STORAGE_BUCKET_NAME}.s3.{AWS_S3_REGION_NAME}.amazonaws.com'
# Optional but recommended:
AWS_DEFAULT_ACL = None # Prevents "Access Denied" errors
AWS_QUERYSTRING_AUTH = False # Removes ?AWSAccessKeyId=... from URLs
MEDIA_URL = f'https://{AWS_S3_CUSTOM_DOMAIN}/'
# Configuration of default storages for Django >4.2 versions
STORAGES = {
"default" : {
"BACKEND" : "storages.backends.s3boto3.S3Boto3Storage",
},
"staticfiles" : {
"BACKEND" : "storages.backends.s3boto3.S3Boto3Storage"
}
}
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/5.1/howto/static-files/
STATIC_URL = f'https://{AWS_S3_CUSTOM_DOMAIN}/static/'
Кроме того, убедитесь, что у вас есть storages в вашем INSTALLED_APPS, чтобы он хорошо функционировал. В моем случае я вошел в систему с помощью терминала, используя aws configure (boto3) из-за чего мне не понадобились ключ и учетные данные AWS. Но если это не так, обязательно укажите учетные данные AWS. Кроме того, добавьте свой IP address в свою группу входящих правил безопасности для EC2, в которой выполняется ваше приложение Django.