s3 bucket返回NoneType

时间:2014-07-14 21:49:11

标签: 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或从芹菜执行。我得到了同样的错误:

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集成之前,网站工作正常。

1 个答案:

答案 0 :(得分: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设置中包含完整路径。