Django + Heroku + S3

Posted

技术标签:

【中文标题】Django + Heroku + S3【英文标题】: 【发布时间】:2012-09-27 19:31:22 【问题描述】:

我一直在尝试研究如何让 AWS S3 与 Heroku 一起用于 FileField 和 ImageField 上传。但我一直未能让它工作。

计划是

    使用 FileField 上传一些文件。 将 ImageField 用于个人资料图片。 使用 Sorl 缩略图调整这些图片的大小。

我关注了this 文章,但它似乎不起作用。 有什么我想念的吗? 我想要文件上传,尽可能轻松。有没有比 AWS 对 django 和 heroku 更友好的更好选择?在这方面的任何帮助将不胜感激。

【问题讨论】:

【参考方案1】:

使用Django Storages 管理 S3 上的静态文件。然后关注Heroku Static assets guide when deploying。

首先,使用 AWS 控制台或您喜欢的工具在 S3 中创建一个存储桶。然后,修改您的 settings.py 并添加以下值:

import os

AWS_ACCESS_KEY_ID = os.environ.get('AWS_ACCESS_KEY_ID')
AWS_SECRET_ACCESS_KEY = os.environ.get('AWS_SECRET_ACCESS_KEY')
AWS_STORAGE_BUCKET_NAME = '<YOUR BUCKET NAME>'

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

STATIC_URL = 'http://' + AWS_STORAGE_BUCKET_NAME + '.s3.amazonaws.com/'
ADMIN_MEDIA_PREFIX = STATIC_URL + 'admin/'

请注意,我们使用环境变量来存储 AWS 访问密钥和秘密密钥。当我们讨论这个主题时,如果您打算开源您正在部署的 Django 应用程序,请考虑将您的 SECRET_KEY 存储在环境变量中。

以上来自here

【讨论】:

这太棒了!谢啦!您可能唯一需要注意的是,由于这种方法是 Boto,所以任何使用这种方法的人都必须安装 Boto。不过,我确实有另一个问题要问你。如何向其中添加访问控制策略 = public-read?我尝试在 settings.py 中添加 acl='public-read' 但这似乎不起作用 我只是希望谷歌文档查看器能够访问我上传的文件。有没有办法做到这一点? 也许aws.amazon.com/s3/faqs/… 应该有帮助? 问题远不止于此。我所要做的就是用户 urlencode :) 很抱歉给您带来麻烦。

以上是关于Django + Heroku + S3的主要内容,如果未能解决你的问题,请参考以下文章

在heroku上部署django网站时出错

在 Heroku 上部署 React 和 Django

在 Heroku 上部署 Django\Tornado

在 Heroku 上为 Django 配置 gunicorn

Django + Heroku + S3

使用 django 频道的 heroku 的正确 procfile / 要求是啥?