[Django]不能运行collectstatic上传媒体到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而不是secret key。

从我在类似主题中发现的信息来看,django-storage可以使用的区域列表和AWS中可用的区域列表有些不匹配。我使用的是eu-central-1(法兰克福),无论我从应用程序和AWS进行了什么设置/权限,我都反复得到相同的NoneType错误。所以,我决定在us-west-2(俄勒冈州)创建一个新的桶。奇迹是,它成功了。写和读静态文件。然后我换回eu-central-1桶进行双重检查(与us-west-2设置相同)和…

结论:django-storage和一些AWS区域有问题。

尝试从当前使用的区域切换到另一个区域。

最新更新