s3 bucket returns NoneType



和这里完全一样:Can't collectstatic to s3通过Heroku使用boto - s3桶返回NoneType

这仍然不能解决这个问题。

my 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、access key和bucket name的环境变量。有趣的变化

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:

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设置中包含完整路径。

最新更新