我无法为我的生活弄清楚如何设置django-storage。所有的方向似乎都是不完整的。
我试过了: http://django-storages.readthedocs.org/en/latest/backends/amazon-S3.html http://blog.doismellburning.co.uk/2012/07/14/using-amazon-s3-to-host-your-django-static-files/ 还有一些我现在找不到的。
我已经在youtube上查看了一个跟随的视频教程,但没有任何内容。
我看了看stackoverflow,我只是输了。我不知道该怎么做。
答案 0 :(得分:11)
这是我为同事们制作的设置清单。
settings_local.py
。仍在IAM中,设置用户访问权限:
{
"Version": "2013-08-17",
"Statement": [
{
"Effect": "Allow",
"Action": "s3:*",
"Resource": ["*"]
}
]
}
此策略允许访问用户组的所有存储桶:
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"s3:ListAllMyBuckets"
],
"Effect": "Allow",
"Resource": "arn:aws:s3:::*"
},
{
"Action": [
"cloudfront:*"
],
"Effect": "Allow",
"Resource": "*"
}
]
}
现在,存储桶已设置,用户可以访问它。您可以尝试从Django设置和测试对存储桶的访问。
安装以下软件包:
django-storages==1.1.8
boto==2.9.7
我将此代码添加到settings_local.py
,以免将其公开给那些查看提交的人:
USE_AMAZON = False # Set this to True when ready
STATIC_URL = 'your-bucket-s3-url'
DEFAULT_FILE_STORAGE = 'storages.backends.s3boto.S3BotoStorage'
AWS_ACCESS_KEY_ID = 'XXXXXXXXXXXXXXXXX'
AWS_SECRET_ACCESS_KEY = 'YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY'
AWS_STORAGE_BUCKET_NAME = 'your-bucket-name'
此代码转到settings.py
:
from settings_local import *
if USE_AMAZON:
BASE_MEDIA_URL = 'static'
MEDIA_URL = '/media/'
DEFAULT_FILE_STORAGE = 'storages.backends.s3boto.S3BotoStorage'
STATIC_ROOT = os.path.join(settings.BASE_PATH, 'static')
MEDIA_ROOT = os.path.join(settings.BASE_PATH, 'old_media')
STATICFILES_DIRS = (
('img', os.path.join(STATIC_ROOT, 'img'),
('js', os.path.join(STATIC_ROOT, 'js'),
)
INSTALLED_APPS += (
'django.contrib.staticfiles',
'storages',
)
转到AWS S3部分,获取您的存储桶的网址,将其粘贴到设置文件中,相应地设置STATIC_URL
。
将凭据中的密钥粘贴到settings_local.py中。 现在Django应该能够将静态文件上传到存储。
运行此命令:
$ uenv/bin/python your_project/manage.py collectstatic
如果上传文件,那么一切都是正确的。如果没有,请检查错误消息。
pyflakes your_project/settings*.py
)。只是检查文件是否可以从网络访问,将存储桶的S3网址粘贴到STATIC_URL中。运行Django并查看statc资产的来源。
如果您想要CloudFront,还需要更多步骤。
在AWS中,转到服务>存储&内容传递> CloudFront的。创建分发。分发就像一个可以访问文件夹的虚拟Web服务器。
选择:
转到新的分发设置并复制域名。将其粘贴为STATIC_URL
文件中的settings_local.py
。
来自CloudFront的新STATIC_URL
不应包含存储桶名称,因为此域名专门针对该存储桶。
此URL是一种敏感数据,因为访问它会花费您真正的金钱并且比本地开发服务器慢,因此可能不应该在开发环境中运行。
希望这有帮助。