2012-07-08 91 views
4

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

虽然媒体文件有点问题。

用户上传的唯一媒体是照片。再次,因为这是一个小项目,音量会很低。目前,这些照片正在正常使用。但是当更新推送到Heroku时,与现有上传照片的链接在页面上断开并且必须重新上载以再次出现,这显然是不可接受的。

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

任何见解或经验的欢迎。

+0

对问题的描述很好。 – 2016-07-15 12:52:14

回答

11

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

这不仅是将更新推送到应用程序导致文件消失的问题;此外,如果您有多个网页dynos(Heroku应用程序中最典型的用例),那么您的文件只会出现在碰到他们上传到的网页dyno的用户。

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

+0

这是一个很好的答案。我可能会转向S3;它似乎并不昂贵。这也可能与我为什么在同步更新后Haystack搜索没有返回结果有关,尽管它可能完全是另一个问题。谢谢。 – 2012-07-08 02:30:14