Статические файлы Django Не загружаются в Digital Ocean Spaces, несмотря на правильную конфигурацию [дубликат]
У меня возникли проблемы с тем, что статические файлы Django не загружаются в Digital Ocean Spaces (хранилище, совместимое с S3) в процессе работы, так как я обновился с 4.2 до Django 5.2. В рамках этого обновления я также обновил python, boto3 и django-хранилища.
Команда collectstatic
, похоже, успешно выполняется локально, но файлы в корзине Spaces не обновляются. Кроме того, некоторые статические файлы (в частности, CSS) загружаются вместо того, чтобы отображаться в браузере.
Текущая настройка
- Django 5.2
- Цифровые океанские пространства (S3-совместимое хранилище)
- Пользовательский сервер хранения данных с использованием
django-storages
- Рабочей среды (DEBUG=False)
- Вот мой Cpp-файл с использованием pipenv для зависимостей
[[source]]
url = "https://pypi.org/simple"
verify_ssl = true
name = "pypi"
[packages]
django = "==5.2"
pillow = "*"
python-dotenv = "*"
stripe = "*"
mailchimp-marketing = "*"
dotenv = "*"
gunicorn = "*"
psycopg2 = "*"
django-storages = "==1.14.2"
boto3 = "==1.34.69"
weasyprint = "*"
[dev-packages]
[requires]
python_version = "3.12"
Конфигурация
# settings.py (production settings)
AWS_ACCESS_KEY_ID = os.getenv('AWS_ACCESS_KEY_ID')
AWS_SECRET_ACCESS_KEY = os.getenv('AWS_SECRET_ACCESS_KEY')
AWS_STORAGE_BUCKET_NAME = 'equine-pro'
AWS_S3_ENDPOINT_URL = 'https://ams3.digitaloceanspaces.com'
AWS_S3_OBJECT_PARAMETERS = {
'CacheControl': 'max-age=86400',
'ACL': 'public-read'
}
AWS_DEFAULT_ACL = 'public-read'
AWS_LOCATION = 'static'
AWS_S3_CUSTOM_DOMAIN = 'equine-pro.ams3.cdn.digitaloceanspaces.com'
AWS_S3_REGION_NAME = 'ams3'
AWS_S3_FILE_OVERWRITE = True
AWS_QUERYSTRING_AUTH = False
AWS_S3_VERIFY = True
AWS_S3_SIGNATURE_VERSION = 's3v4'
AWS_S3_ADDRESSING_STYLE = 'virtual'
STATICFILES_STORAGE = 'equineproclinic.storage_backends.StaticStorage'
Пользовательский сервер хранения данных
# storage_backends.py
from storages.backends.s3boto3 import S3Boto3Storage
import logging
logger = logging.getLogger(__name__)
class StaticStorage(S3Boto3Storage):
location = 'static'
default_acl = 'public-read'
def _save(self, name, content):
logger.info(f"Attempting to save {name}")
try:
# Set content type based on file extension
content_type = self._get_content_type(name)
params = {
'ACL': self.default_acl,
'CacheControl': 'max-age=86400',
'ContentType': content_type
}
return super()._save(name, content, extra_args=params)
except Exception as e:
logger.error(f"Error saving {name}: {str(e)}")
raise
Дополнительный контекст
- Приложение развернуто на платформе Digital Ocean App Platform
- Статические файлы предоставляются через CDN
- Подтверждено наличие и корректность всех учетных данных AWS
- Серверная часть хранилища может быть успешно инициализирована (проверено с помощью пользовательской команды управления)
Мы были бы очень признательны за любую помощь или рекомендации!
Что я пробовал
- Подтвержденные учетные данные AWS правильно заданы в переменных среды Digital Oceans
- Обновлены настройки CORS в Digital Ocean Spaces, чтобы разрешить использование методов GET, PUT, POST, DELETE и HEAD
- Создана пользовательская команда управления для проверки конфигурации хранилища
- Добавлено расширенное ведение журнала для отслеживания процесса загрузки
- Очистил каталог статических файлов и запустил collectstatic с флагом --clear
Текущее поведение
collectstatic
команда выполняется без ошибок- Файлы копируются локально, но не загружаются в Spaces
- Во время процесса не регистрируется никаких ошибок
- Существующие файлы в корзине Spaces не обновляются
- Некоторые статические файлы (CSS) загружаются, а не отображаются