2013-12-09 93 views
4

我用静态文件部署了一个使用heroku和AWS S3的django应用程序,问题是我还没有找到关于如何将heroku的Postgres数据库与S3服务相关联的信息。使用AWS S3为django提供heroku上的静态文件?

我已经设置了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

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

所以我的代码需要是这样的,服务于不同的图像 aws static file http://ishopss.com/course.png

我希望有人能帮助我,谢谢。

回答

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

基本上我需要下载伯特(PIP安装伯特),并把它放在requirements.txt(PIP冻结> 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 + '/' 

然后,你需要使用

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

更新src和HREF在HTML文件设置 'AWS_ACCESS_KEY_ID', 'AWS_SECRET_ACCESS_KEY', 'AWS_STORAGE_BUCKET_NAME'

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

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

+1

请使用通过在模板中对“STATIC_URL”进行硬编码来实现'{%static%}'标记。很高兴这个帖子很有用! –

1

请看看这里:

可能会简单的方法为您服务。我支持{{course.image}}从头开始工作。如果没有 - 您可以在AWS上创建CDN点,并将CDN网址存储在您的django设置文件中。之后,你的HTML应该是这样的:

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

如果你喜欢糖,和甲肝一段时间,你可以写你自己的templatetags,它会做这样的:

{% my_static course,.image %} 
+1

的权限,不要硬编码的连接(即在模板中使用'CDN_URL');相反,使用'{%static%}'标记 - 无论您的存储如何,它都会处理URL创建 - http://staticfiles.productiondjango.com/blog/stop-using-static-url-in-templates/ –