Django collecstatic требует STATIC_ROOT, но установка STATIC_ROOT блокирует загрузку на S3 [дубликат]

Итак, я использую статическое хранилище S3 в сочетании с Django для обслуживания статических файлов для развертывания Zappa. Долгое время все это работало достаточно хорошо, пока я недавно не обновился до новой версии Django.

Python 3.12.3
Django 5.1.1

Раньше я мог использовать: python manage.py collectstatic

Чтобы переместить мои статические файлы в ведро S3. Но в настоящее время это не удается с этой ошибкой:

django.core.exceptions.ImproperlyConfigured: You're using the staticfiles app without having set the STATIC_ROOT setting to a filesystem path.

Однако если я задам STATIC_ROOT, то вместо того, чтобы толкать в S3, он соберет статические файлы локально.

You have requested to collect static files at the destination
location as specified in your settings:

    /-local storage-/static

Вот мой файл settings.py:

# STATIC_ROOT = os.path.join(BASE_DIR, "static")

STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'templates'),
    os.path.join(BASE_DIR, "static")
]

YOUR_S3_BUCKET = "static-bucket"

STATICFILES_STORAGE = "django_s3_storage.storage.StaticS3Storage"
AWS_S3_BUCKET_NAME_STATIC = YOUR_S3_BUCKET

# These next two lines will serve the static files directly
# from the s3 bucket
AWS_S3_CUSTOM_DOMAIN = '%s.s3.amazonaws.com' % YOUR_S3_BUCKET
STATIC_URL = "https://%s/" % AWS_S3_CUSTOM_DOMAIN

Учетные данные и все остальное также находятся в settings.py. Похоже, я что-то упустил, мне нужен STATIC_ROOT для запуска collectstatic, но наличие STATIC_ROOT делает сбор статических данных локальным.

Edit: Исправлен вопрос, STATIC_ROOT был определен дважды. К сожалению, поведение не изменилось.

Редактирование: добавлена информация

STORAGES не установлен, похоже.

STATICFILES_STORAGE = "django_s3_storage.storage.StaticS3Storage" Но моя версия Django - 5.1.1

Я использую пакет django_s3_storage, да, django_s3_storage и storages являются установленными приложениями.

Решение: STATICFILES_STORAGE устарел с версии 4.2 и удален в версии 5.1. Правильная конфигурация выглядит так:

# These next two lines will serve the static files directly
# from the s3 bucket
AWS_S3_CUSTOM_DOMAIN = '%s.s3.amazonaws.com' % YOUR_S3_BUCKET
STATIC_URL = "https://%s/" % AWS_S3_CUSTOM_DOMAIN

STORAGES = {
    'default': {
        'BACKEND': 'storages.backends.s3boto3.S3Boto3Storage',
    },
    'staticfiles': {
        'BACKEND': 'storages.backends.s3boto3.S3Boto3Storage',
        'OPTIONS': {
            'bucket_name': AWS_S3_BUCKET_NAME_STATIC,
        },
    },
}

Спасибо @abdul-aziz-barkat

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