Невозможно использовать хранилища django для извлечения файлов stati c - PullRequest
0 голосов
/ 28 апреля 2020

Я пытаюсь использовать django хранилища для извлечения stati c файлов для Django admin. Я сталкиваюсь со странным поведением, которое не могу ясно понять. У меня есть две разные корзины, одна для stati c файлов, а другая для какой-то другой цели. Если я закомментирую AWS_S3_CUSTOM_DOMAIN, оставь все остальное как есть (как это опубликовано ниже), все работает. Но если я раскомментирую AWS_S3_CUSTOM_DOMAIN и переопределю пользовательский домен в моем хранилище данных StaticStorage, он начнет давать мне 403. Я знаю, что мне чего-то не хватает, просто не могу понять, что.

settings.py

S3_BUCKET = os.environ.get('S3_BUCKET')
S3_FILE_LOCATION = os.environ.get('S3_FILE_LOCATION')

AWS_ACCESS_KEY_ID = os.environ.get('S3_STORAGE_ACCESS_KEY_ID', '')
AWS_SECRET_ACCESS_KEY = os.environ.get('S3_STORAGE_SECRET_ACCESS_KEY', '')
AWS_STORAGE_BUCKET_NAME = os.environ.get('S3_BUCKET', '')
AWS_S3_CUSTOM_DOMAIN = f"{os.environ.get('S3_BUCKET', '')}.s3.amazonaws.com"
AWS_S3_OBJECT_PARAMETERS = {
    'CacheControl': 'max-age=86400',
}
AWS_DEFAULT_ACL = None
AWS_S3_VERIFY = False
AWS_S3_USE_SSL = False

# s3 static settings
STATIC_FILE_BUCKET = os.environ.get('STATIC_FILE_BUCKET')
STATIC_LOCATION = 'static'
STATIC_S3_CUSTOM_DOMAIN = f"{os.environ.get('STATIC_FILE_BUCKET', '')}.s3.amazonaws.com"
STATIC_URL = f'https://{STATIC_S3_CUSTOM_DOMAIN}/{STATIC_LOCATION}/'
STATICFILES_STORAGE = 'apps.utils.storage_backends.StaticStorage'
DEFAULT_FILE_STORAGE = 'apps.utils.storage_backends.PrivateMediaStorage'

storage_backends.py

class StaticStorage(S3Boto3Storage):
    location = 'static'
    default_acl = 'private'

    def __init__(self, *args, **kwargs):
        kwargs['bucket'] = settings.STATIC_FILE_BUCKET
        # self.custom_domain = settings.STATIC_S3_CUSTOM_DOMAIN
        super().__init__(*args, **kwargs)

1 Ответ

0 голосов
/ 02 мая 2020

Я выяснил проблему, мне просто нужно было установить custom_domain как False в моих storage_backends. Затем он просто использует stati c url, как установлено в моем файле settings.py для stati c файлов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...