Как использовать 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?

Вернуться на верх