我使用以下配置将静态和媒体文件存储到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')然而,当我尝试运行集合体静态时,我总是得到以下错误
k_date = self._sign(('AWS4' + key).encode('utf-8'),
TypeError: can only concatenate str (not "NoneType") to str当您无法连接到S3时,似乎会出现此错误。我做错了什么,感谢你的帮助。
发布于 2021-10-27 08:24:04
我今天也遇到了同样的问题。
settings.py看起来很好,但应用程序仍然没有连接到S3,并且返回None而不是密钥。
从我在类似主题中发现的信息来看,django-storage可以使用的区域列表和AWS中可用的区域列表存在一些不匹配。我使用的是eu-central 1(法兰克福),无论我在应用程序和AWS上做了什么设置/权限,都反复收到相同的NoneType错误。所以,我决定在us-west-2 (俄勒冈州)创建一个新的bucket。还有奇迹--它起作用了。写入和读取静态文件。然后,我切换回eu-central 1存储桶以再次检查(使用与us-west-2相同的设置)和...再次获取NoneType错误。
结论: django-storage +一些AWS区域有问题。
尝试从您当前使用的区域切换到另一个区域。
https://stackoverflow.com/questions/69726353
复制相似问题