与此处完全相同的问题: 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集成之前,网站工作正常。
答案 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
设置中包含完整路径。