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

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

我已经部署到Heroku,我的图像仍在显示。 我什么时候需要使用S3? 我在网站上总共有100张图片,大小每周大约会有7张。 我可以只使用heroku吗?

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

正如Heroku文档中所述 :

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

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

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

也就是说,如果您将传递文件上传到外部文件存储 ,则可以临时将图像存储在Heroku文件系统上 。

资产管道

FiveDigit的答案非常好 – 还有更多要考虑的事情; asset pipeline在Rails中的作用

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

资产管道提供了一个连接和缩小或压缩JavaScript和CSS资产的框架。 它还增加了以其他语言和预处理器(如CoffeeScript,Sass和ERB)编写这些资产的function。

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

S3

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

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