[Django]Cant run collectstatic to upload media to S3

Я использую следующие конфигурации для хранения статических и медиа файлов на S3

USES_S3 = config('USES_S3') == 'True'

if USES_S3:
    AWS_ACCESS_KEY_ID = config('AWS_ACCESS_KEY_ID')
    AWS_SECRET_KEY = config('AWS_SECRET_KEY')
    AWS_STORAGE_BUCKET_NAME = config('AWS_STORAGE_BUCKET_NAME')
    AWS_DEFAULT_ACL = 'public-read'
    AWS_S3_REGION_NAME = config('AWS_S3_REGION_NAME')
    AWS_S3_CUSTOM_DOMAIN = f'{AWS_STORAGE_BUCKET_NAME}.s3.{AWS_S3_REGION_NAME}.amazonaws.com'
    AWS_S3_OBJECT_PARAMETERS = {'CacheControl': 'max-age=94608000'}
    STATICFILES_LOCATION = 'static'
    STATICFILES_STORAGE = 'custom_storages.StaticStorage'
    MEDIAFILES_LOCATION = 'media'
    DEFAULT_FILE_STORAGE = 'custom_storages.MediaStorage'
    STATICFILES_URL = f'https://{AWS_S3_CUSTOM_DOMAIN}/static/'
    MEDIAFILES_URL = f'https://{AWS_S3_CUSTOM_DOMAIN}/media/'
else:
    STATIC_URL = '/static/'
    STATIC_ROOT = os.path.join(BASE_DIR, 'static')
    MEDIA_URL = '/media/'
    MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

Однако я продолжаю получать следующую ошибку, когда я пытаюсь запустить collectstatic

k_date = self._sign(('AWS4' + key).encode('utf-8'),
TypeError: can only concatenate str (not "NoneType") to str

Похоже, эта ошибка возникает, когда вы не можете подключиться к S3. Что я делаю не так, любая помощь приветствуется.

Сегодня у меня возникла такая же проблема.

settings.py выглядел нормально, но приложение по-прежнему не подключалось к S3 и возвращало None вместо секретного ключа.

По информации, которую я нашел в похожих темах, есть некоторое несоответствие в списке регионов, которые может использовать django-storage, и регионов, доступных в AWS. Я использовал eu-central-1 (Frankfurt) и постоянно получал одну и ту же ошибку NoneType независимо от того, какие настройки/разрешения я делал как в приложении, так и в AWS. Поэтому я просто решил создать новое ведро в us-west-2 (Орегон). И чудо - оно работает. Запись и чтение статических файлов. Затем я переключился обратно на ведро eu-central-1 для двойной проверки (с теми же настройками, что и для us-west-2) и... снова получил ошибку NoneType.

Вывод: что-то не так с django-storage + некоторые регионы AWS.

Попробуйте перейти на другой регион, чем тот, который вы используете сейчас.

Пожалуйста, проголосуйте/прокомментируйте, если это полезно или нет.

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