首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >[Django]无法运行collectstatic将媒体上传到S3

[Django]无法运行collectstatic将媒体上传到S3
EN

Stack Overflow用户
提问于 2021-10-26 15:56:53
回答 1查看 47关注 0票数 0

我使用以下配置将静态和媒体文件存储到S3

代码语言:javascript
复制
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')

然而,当我尝试运行集合体静态时,我总是得到以下错误

代码语言:javascript
复制
k_date = self._sign(('AWS4' + key).encode('utf-8'),
TypeError: can only concatenate str (not "NoneType") to str

当您无法连接到S3时,似乎会出现此错误。我做错了什么,感谢你的帮助。

EN

回答 1

Stack Overflow用户

发布于 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区域有问题。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69726353

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档