python - s3 存储桶返回 NoneType

标签 python django amazon-web-services amazon-s3

与此处完全相同的问题: Can't collectstatic to s3 via Heroku using boto - s3 bucket returns a NoneType

这仍然不能解决问题。

我的settings.py的重要部分

from base64 import b64decode
from storages.backends.s3boto import S3BotoStorage


DEFAULT_FILE_STORAGE = 'storages.backends.s3boto.S3BotoStorage'
STATICFILES_STORAGE = 'storages.backends.s3boto.S3BotoStorage'

AWS_S3_SECURE_URLS = False       # use http instead of https
AWS_QUERYSTRING_AUTH = False     # don't add complex authentication-related query parameters for requests
AWS_S3_ACCESS_KEY_ID = <snip>     # enter your access key id
AWS_S3_SECRET_ACCESS_KEY = <snip> # enter your secret 
AWS_STORAGE_BUCKET_NAME = 'mybucket/images/'
S3_URL = 'http://%s.s3.amazonaws.com/' % AWS_STORAGE_BUCKET_NAME
STATIC_URL = S3_URL

在 runserver、collectstatic 或从 celery 执行时。我得到同样的错误:

File "/virtualenv/path/to/site-package/boto/s3/connection.py", line 94, in build_auth_path
path = '/' + bucket
TypeError: cannot concatenate 'str' and 'NoneType' objects

为 keyid、访问 key 和存储桶名称设置环境变量。有趣的变化

S3_URL = 'http://%s.s3.amazonaws.com/' % AWS_STORAGE_BUCKET_NAME

S3_URL = 'http://%s.s3.amazonaws.com' % AWS_STORAGE_BUCKET_NAME

导致更奇怪的错误:

    from django.db.models import signals, sql
ImportError: cannot import name signals

在我开始尝试 s3 集成之前,该网站运行良好。

最佳答案

从 settings.py 中删除此行:

从 storages.backends.s3boto 导入 S3BotoStorage

任何事情都不需要它,但它导致了此错误。当您导入 S3BotoStorage 时,该类会尝试从 settings.py 获取存储桶名称和其他设置。为了避免无限导入循环,Python 将只允许 S3BotoStorage 类从 settings.py 导入在 import S3BotoStorage 行之前设置的变量。所有其他变量将显示为 None,其中包括重要的 AWS_STORAGE_BUCKET_NAME 设置。

顺便说一句,您的存储桶名称设置 (AWS_STORAGE_BUCKET_NAME) 不应包含“/”,这在存储桶名称中是不允许的。修复此错误后,可能会导致其他错误。不过,您可以在 S3_URL 设置中包含完整路径。

关于python - s3 存储桶返回 NoneType,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24746582/

相关文章:

python - Timedelta在python中与 float 相乘

javascript - 如何从灯箱画廊内触发无限滚动 - Django/FancyBox/Waypoints.js

python - 如何将模型转换为其后代代理模型的实例

node.js - 将录制的音频发送到 S3

python - 使用 Numba 加速 Python 代码时引发 TypeError

python - 由于数据帧错误,无法绘制实时数据

amazon-web-services - 尝试将 A 记录添加到云前端时,AWS Route 53 消息被禁止

java - 收集与多个 AWS 服务交互的 Java 应用程序的性能指标

python - 查找 HTML 页面中与特定 URL 模板匹配的所有链接

python - 在 django 中有效地对过滤器查询进行计数