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.

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