设置Django以从Amazon S3提供媒体文件

时间:2013-11-11 20:17:23

标签: python django heroku amazon-s3

我正在尝试在Heroku中部署我的项目但是媒体文件(图像)在一段时间后被删除,所以有人告诉我,我需要使用名为“Amazon S3”的服务,我的问题是,如何配置我打算使用那项服务。有人可以帮帮我吗?

2 个答案:

答案 0 :(得分:0)

为初学者查看此内容 http://docs.aws.amazon.com/AmazonS3/latest/dev/WebsiteHosting.html

基本上你不需要Django在这里提供任何东西,而是你需要确保静态引用指向另一个域(S3 one)而不是你的Heroku。

答案 1 :(得分:0)

您可以按照本文中的步骤进行操作:

http://blog.doismellburning.co.uk/2012/07/14/using-amazon-s3-to-host-your-django-static-files/

但是这样做的一个小教程可能是:

第1步 - 安装boto和django-storages:

$ pip install boto django-storages

将django-storage添加到INSTALLED_APPS:

INSTALLED_APPS += ('storages',)

第2步 - 创建S3存储桶:

转到https://console.aws.amazon.com/s3/home并创建它。

第3步 - 获取您的凭据:

转到https://console.aws.amazon.com/iam/home?#security_credential,点击"访问密钥"并创造它。

第4步 - 将您的凭据添加到django设置:

首先,在项目文件夹中创建一个名为s3utils.py的文件,其中包含以下内容:

from storages.backends.s3boto import S3BotoStorage                                            
StaticRootS3BotoStorage = lambda: S3BotoStorage(location='static')              
MediaRootS3BotoStorage  = lambda: S3BotoStorage(location='media') 

我更喜欢将所有这些配置用作环境变量,所以我建议您这样做:

$ heroku config:set AWS_ACCESS_KEY_ID=YOUR_ACCESS_KEY AWS_SECRET_ACCESS_KEY=YOUR_SECRET_ACCESS_KEY S3_BUCKET_NAME=YOUR_BUCKET_NAME

然后,将其放入您的设置中:

AWS_STORAGE_BUCKET_NAME = os.environ['S3_BUCKET_NAME']                          
MEDIA_ROOT = '/media/'                                                          
S3_URL = 'http://%s.s3.amazonaws.com/' % AWS_STORAGE_BUCKET_NAME                
MEDIA_URL = S3_URL + MEDIA_ROOT                                                 
DEFAULT_FILE_STORAGE = 'YOUR_PROJECT.s3utils.MediaRootS3BotoStorage'                 
STATICFILES_STORAGE = 'YOUR_PROJECT.s3utils.StaticRootS3BotoStorage'                 
AWS_ACCESS_KEY_ID = os.environ['AWS_ACCESS_KEY_ID']                             
AWS_SECRET_ACCESS_KEY = os.environ['AWS_SECRET_ACCESS_KEY']  

第5步 - 再次运行collectstatic

您需要再次收集静态文件,以便将其放入亚马逊。

heroku run python manage.py collectstatic

我希望它有所帮助!