使用AWS S3 for django在heroku上提供静态文件?

时间:2013-12-09 21:17:37

标签: python django heroku amazon-web-services amazon-s3

我正在使用heroku和AWS S3为静态文件部署django应用程序,问题是我没有找到有关如何将heroku的Postgres数据库链接到S3服务的信息。

我已经设置了AWS_ACCESS_KEY_ID,AWS_SECRET_ACCESS_KEY,S3_BUCKET,添加CORS配置,但我的问题是如何将S3存储与Heroku的postgres数据库链接?这可能吗?

这是我的模型在管理员中的样子,但如果我在这里上传图像,5分钟后就会消失。 Image Upload for the model http://ishopss.com/imageUpload.png

当然我可以使用这样的静态网址,但问题是我想要显示不同的图像,而不是所有的图像。 serve in the db http://ishopss.com/for.png

所以我的代码必须像这样,以提供不同的图像 aws static file http://ishopss.com/course.png

我希望有人可以帮助我,谢谢。

2 个答案:

答案 0 :(得分:6)

我在这篇文章中找到了解决方案:

http://blog.doismellburning.co.uk/2012/06/25/django-and-static-files/

http://offbytwo.com/2012/01/18/deploying-django-to-heroku.html

https://devcenter.heroku.com/articles/s3

基本上我需要下载boto(pip install boto)并将其放入requirements.txt(pip freeze> requirements.txt),并在settings.py中添加:

INSTALLED_APPS = ('storages',)

AWS_ACCESS_KEY_ID = 'xxxxxx'
AWS_SECRET_ACCESS_KEY = 'xxxxxxx'
AWS_STORAGE_BUCKET_NAME = 'bucket_name'


STATICFILES_STORAGE = 'storages.backends.s3boto.S3BotoStorage'
DEFAULT_FILE_STORAGE = 'storages.backends.s3boto.S3BotoStorage'

STATIC_URL = 'http://s3.amazonaws.com/%s' % AWS_STORAGE_BUCKET_NAME + '/'

然后你需要设置'AWS_ACCESS_KEY_ID','AWS_SECRET_ACCESS_KEY','AWS_STORAGE_BUCKET_NAME'

使用

$ heroku config:set AWS_ACCESS_KEY_ID=xxx AWS_SECRET_ACCESS_KEY=yyy
$ heroku config:set S3_BUCKET_NAME=appname-assets

更新html中的src和href:

url http://ishopss.com/url.png

最后,您需要更新https://console.aws.amazon.com/

中的权限

答案 1 :(得分:1)

请看这里:

对你来说可能是最简单的方式。我认为{{course.image}}将从头开始工作。如果不是 - 您可以在AWS上创建CDN点,并在您的django设置文件中存储CDN URL。之后你的html应该是这样的:

{{ settings.CDN_URL }}/{{ course.image }}

如果你喜欢糖,并且有时候你可以编写自己的模板标签,那就像这样:

{% my_static course,.image %}