我可以在heroku中托管图像吗?或者我需要S3?

时间:2014-07-08 23:12:10

标签: ruby-on-rails heroku amazon-s3

我正在部署我的网络应用程序(它是为企业客户端)。因此,用户不会添加图像,只会添加业务。

我已经部署到Heroku,我的图像仍在显示。我什么时候需要使用S3?我在网站上总共有100张图片,尺寸会有不同的信息,例如>每周7点。我可以只使用heroku吗?

2 个答案:

答案 0 :(得分:39)

简短回答:如果您允许用户或管理员上传图片,则不应使用Heroku的文件系统,因为图像会突然消失。

正如Heroku documentation

中所述
  

每个dyno都有自己的短暂文件系统,并带有最近部署代码的全新副本。在dyno的生命周期中,其运行进程可以将文件系统用作临时暂存器,但是任何其他dyno中的进程都不会看到所写的文件,并且在dyno停止或重新启动时,所写的任何文件都将被丢弃。

这意味着用户在Heroku文件系统上上传的图像不仅会在每次推送时消失,而且每次dyno重启都会消失,偶尔会发生这种情况(即使你经常ping它们以防止它们进入睡眠状态)。

一旦你开始使用第二个web dyno,它将无法读取其他dyno的文件系统,因此只能从一个dyno中看到图像。这会导致奇怪的问题,用户有时可以看到图像,有时他们不会。

也就是说,如果实施a pass-through file upload to an external file store,您可以暂时将图像存储在Heroku文件系统上。

答案 1 :(得分:7)

资产管道

FiveDigit答案非常好 - 还有更多需要考虑的问题; asset pipeline在Rails中的作用

如果您拥有的图像用作资产(IE在布局中使用;用户无法更改),则可以将它们存储在assets/images文件夹中。您可以保留的应用程序资产数量没有限制,但您必须确定它们是什么 - 它们是有助于您的应用程序操作的文件; 可以上传/操作的文件:

  

资产管道提供了连接和缩小的框架   压缩JavaScript和CSS资产。它还增加了写作能力   这些资产用其他语言和预处理器如   CoffeeScript,Sass和ERB。

资产管道将压缩&当您将应用程序部署到Heroku或任何其他服务器之类的应用程序时,指纹它拥有的stylesheetimagejs文件。这意味着如果这些文件没有改变,您可以将它们存储在那里

-

<强> S3

您希望使用S3之类的原因,特别是如果您的图片文件旨在更改(用户可以上传/编辑它们)。无论Heroku的文件系统如何,如果图像与数据库中的更改相关联,您必须为它们保留一个中央存储 - 如果您更换服务器,则需要它们可以访问

要做到这一点,你应该确保你了解你希望文件如何工作 - 它们是否会被用户不断操纵?如果是这样,您就必须探索将S3集成到您的应用中