Django:直接从Heroku提供静态媒体文件

时间:2012-07-08 02:16:01

标签: django heroku amazon-s3

我最近将我的第一个Django应用程序部署到了Heroku。这是我主人的项目所以可扩展性不是一个大问题。我已经读过直接从Heroku提供静态和媒体文件可能出现的问题,而且Amazon S3是最好的解决方案。到目前为止,静态文件 - CSS,JS - 正在从Heroku中正确提供。

但媒体文件有点问题。

用户可以上传的唯一媒体是照片。同样,由于这是一个小项目,因此数量会很低。目前,这些照片正在正常提供。但是当更新被推送到Heroku时,指向现有上传照片的链接会在页面上中断并且必须重新上传才能再次出现,这显然是不可接受的。

我正在试图辨别这是否是服务媒体的问题,可以通过外部主机(如Amazon S3或其他正在发生的事情)解决。我并不急于为托管付费,但如果它能解决这个问题,那么它可能就是选择的解决方案。

欢迎任何见解或经验。

1 个答案:

答案 0 :(得分:11)

这是预期的行为,因为对Heroku web dyno的文件系统的写入不会添加到源代码管理中,也不会被视为“应用程序的一部分”。基本上,除了临时文件之外,您根本不应允许对文件系统进行任何写入。

这不仅是推送应用程序更新导致文件消失的问题;此外,如果你有多个网络动态数据库(Heroku应用程序中最典型的用例),你的文件只会出现在碰巧上传到网络动态的用户身上。

解决方案是让您的用户直接上传到另一台服务器或S3并将链接传递给您的应用程序,或者让您自己的服务器自动将上传的文件发送到另一个目的地,例如S3本身。事实上,像CSS这样的静态资产也可以从S3获得更好的服务,但这有时是实用的,有时也不是。

相关问题