【问题标题】:s3 bucket returns NoneTypes3 存储桶返回 NoneType
【发布时间】:2014-09-04 23:06:16
【问题描述】:

与此处完全相同的问题: 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、访问密钥和存储桶名称设置环境变量。有趣的变化

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 集成之前,该网站运行良好。

【问题讨论】:

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


    【解决方案1】:

    从你的 settings.py 中删除这一行:

    from storages.backends.s3boto import S3BotoStorage

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

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

    【讨论】:

    • 这解决了问题。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2020-05-22
    • 2012-12-23
    • 2020-08-12
    • 1970-01-01
    • 2014-01-28
    • 2017-11-01
    • 2020-08-06
    • 2019-03-30
    相关资源
    最近更新 更多