我正在部署我的网络应用程序(它是为企业客户端)。因此,用户不会添加图像,只会添加业务。
我已经部署到Heroku,我的图像仍在显示。我什么时候需要使用S3?我在网站上总共有100张图片,尺寸会有不同的信息,例如>每周7点。我可以只使用heroku吗?
答案 0 :(得分:39)
简短回答:如果您允许用户或管理员上传图片,则不应使用Heroku的文件系统,因为图像会突然消失。
中所述每个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或任何其他服务器之类的应用程序时,指纹它拥有的stylesheet
,image
和js
文件。这意味着如果这些文件没有改变,您可以将它们存储在那里
-
<强> S3 强>
您希望使用S3
之类的原因,特别是如果您的图片文件旨在更改(用户可以上传/编辑它们)。无论Heroku的文件系统如何,如果图像与数据库中的更改相关联,您必须为它们保留一个中央存储 - 如果您更换服务器,则需要它们可以访问
要做到这一点,你应该确保你了解你希望文件如何工作 - 它们是否会被用户不断操纵?如果是这样,您就必须探索将S3
集成到您的应用中