使用boto3和存储将django应用程序的静态文件上传到s3
uploading static files of django app to s3 with boto3 and storages
我知道这个问题已经被问过很多次了,但我仍然无法解决这个问题。我的环境配置:
- Python 2.7
- Django 1.9.5
在我的 requrements.txt 中,我有以下依赖项
- boto3==1.4.2
- django-storages==1.5.1
我在 INSTALLED_APPS 中添加了 storages
。这些是我的设置参数。
AWS_ACCESS_KEY_ID='****'
AWS_SECRET_ACCESS_KEY='****'
AWS_STORAGE_BUCKET_NAME='****'
AWS_AUTO_CREATE_BUCKET = False
DEFAULT_FILE_STORAGE = 'storages.backends.s3boto.S3BotoStorage'
STATICFILES_STORAGE = DEFAULT_FILE_STORAGE
AWS_LOCATION = 'static/'
当我 运行 ./manage.py collectstatic
命令时,我得到以下错误:
File "/home/me/myproj/local/lib/python2.7/site-packages/storages/backends/s3boto.py", line 23, in <module>
raise ImproperlyConfigured("Could not load Boto's S3 bindings.\n"
django.core.exceptions.ImproperlyConfigured: Could not load Boto's S3 bindings.
See https://github.com/boto/boto
知道为什么吗?我没有正确配置什么?
如果您查看 django-storages 代码 (https://github.com/jschneier/django-storages/blob/master/storages/backends/s3boto.py),当 django-storages 无法完成 import
到 boto
的语句时会抛出此错误。我的猜测是您使用的是非常非常旧的 boto 版本。尝试将 boto
升级到版本 2.40+:
pip install boto==2.44
在写评论的时候终于想出了解决办法:
在你的 settings.py 中使用:
STATICFILES_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'
而不是:
STATICFILES_STORAGE = 'storages.backends.s3boto.S3BotoStorage'
为了更好地记录关于 boto3 的库,还有一个未解决的问题:
https://github.com/jschneier/django-storages/issues/229
我在 django-storages 的源代码中找到了解决方案,您可以在这里找到:
https://github.com/jschneier/django-storages/blob/master/storages/backends/s3boto3.py
因为,DEFAULT_FILE_STORAGE = 'storages.backends.s3boto.S3BotoStorage'
你必须安装boto
pip install boto
我知道这个问题已经被问过很多次了,但我仍然无法解决这个问题。我的环境配置:
- Python 2.7
- Django 1.9.5
在我的 requrements.txt 中,我有以下依赖项
- boto3==1.4.2
- django-storages==1.5.1
我在 INSTALLED_APPS 中添加了 storages
。这些是我的设置参数。
AWS_ACCESS_KEY_ID='****'
AWS_SECRET_ACCESS_KEY='****'
AWS_STORAGE_BUCKET_NAME='****'
AWS_AUTO_CREATE_BUCKET = False
DEFAULT_FILE_STORAGE = 'storages.backends.s3boto.S3BotoStorage'
STATICFILES_STORAGE = DEFAULT_FILE_STORAGE
AWS_LOCATION = 'static/'
当我 运行 ./manage.py collectstatic
命令时,我得到以下错误:
File "/home/me/myproj/local/lib/python2.7/site-packages/storages/backends/s3boto.py", line 23, in <module>
raise ImproperlyConfigured("Could not load Boto's S3 bindings.\n"
django.core.exceptions.ImproperlyConfigured: Could not load Boto's S3 bindings.
See https://github.com/boto/boto
知道为什么吗?我没有正确配置什么?
如果您查看 django-storages 代码 (https://github.com/jschneier/django-storages/blob/master/storages/backends/s3boto.py),当 django-storages 无法完成 import
到 boto
的语句时会抛出此错误。我的猜测是您使用的是非常非常旧的 boto 版本。尝试将 boto
升级到版本 2.40+:
pip install boto==2.44
在写评论的时候终于想出了解决办法: 在你的 settings.py 中使用:
STATICFILES_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'
而不是:
STATICFILES_STORAGE = 'storages.backends.s3boto.S3BotoStorage'
为了更好地记录关于 boto3 的库,还有一个未解决的问题: https://github.com/jschneier/django-storages/issues/229
我在 django-storages 的源代码中找到了解决方案,您可以在这里找到: https://github.com/jschneier/django-storages/blob/master/storages/backends/s3boto3.py
因为,DEFAULT_FILE_STORAGE = 'storages.backends.s3boto.S3BotoStorage'
你必须安装boto
pip install boto