[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.
Попробуйте перейти на другой регион, чем тот, который вы используете сейчас.
Пожалуйста, проголосуйте/прокомментируйте, если это полезно или нет.