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

Gib*_*son 21 ruby-on-rails heroku amazon-s3

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

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

fiv*_*git 42

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

正如Heroku文档中所述:

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

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

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

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


Ric*_*eck 8

资产管道

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

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

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

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

-

S3

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

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

  • 嗨,又富了!我会使用 S3 因为虽然我会有少量的图像,但它们每天都会改变...... (2认同)