Как использовать ManifestStaticFilesStorage с django-storages, boto3 на DigitalOcean Spaces Object Storage?
Контекст: Я запускаю Django==5.1.2
.
Мне нужно иметь кэширование статических файлов на prod.
На dev мои настройки выглядят следующим образом
STORAGES = {
"default": {
"BACKEND": "django.core.files.storage.FileSystemStorage",
},
"staticfiles": {
"BACKEND": "django.contrib.staticfiles.storage.ManifestStaticFilesStorage",
},
}
STATIC_URL = "static/"
STATIC_ROOT = os.path.join(BASE_DIR, "staticfiles")
Это работает, как и следовало ожидать. Когда debug=False, django использует хэшированные статические файлы для урлов.
Но на prod мои настройки выглядят так
# DigitalOcean Spaces Settings
# Ref: https://www.digitalocean.com/community/tutorials/how-to-set-up-object-storage-with-django
AWS_ACCESS_KEY_ID = os.getenv("DO_SOS_ACCESS_KEY_ID")
AWS_SECRET_ACCESS_KEY = os.getenv("DO_SOS_SECRET_ACCESS_KEY")
AWS_STORAGE_BUCKET_NAME = os.getenv("DO_SOS_STORAGE_BUCKET_NAME")
AWS_S3_ENDPOINT_URL = os.getenv("DO_SOS_ENDPOINT_URL")
AWS_S3_OBJECT_PARAMETERS = {
"CacheControl": "max-age=86400",
}
AWS_DEFAULT_ACL = "public-read"
STORAGES["default"]["BACKEND"] = "storages.backends.s3boto3.S3Boto3Storage"
STORAGES["staticfiles"]["BACKEND"] = "storages.backends.s3boto3.S3Boto3Storage"
AWS_S3_SIGNATURE_VERSION = (
"s3v4"
)
AWS_S3_CUSTOM_DOMAIN = os.getenv("DO_SOS_CUSTOM_DOMAIN")
# Static & Media URL
STATIC_URL = f"{AWS_S3_ENDPOINT_URL}/static/"
MEDIA_URL = f"{AWS_S3_ENDPOINT_URL}/media/"
Как вы можете видеть, бэкэнд использует "storages.backends.s3boto3.S3Boto3Storage"
на prod вместо "django.contrib.staticfiles.storage.ManifestStaticFilesStorage"
. В этом отчасти и заключается моя проблема. Все статическое содержимое, сохраняемое в моем объектном хранилище Digital Ocean Spaces, не хэшируется. Как я могу настроить мой проект django на сохранение хэшированных статических файлов в моем хранилище объектов Spaces?