在Heroku数据库中存储图像的最简单方法?

时间:2012-08-25 14:40:16

标签: heroku ruby-on-rails-3.2

我们在Heroku上使用他们的生产层PostgreSQL数据库有一个RoR 3.2站点。

我们的网站用户偶尔会上传大小为0.5 - 2MB的图片。出于不同的原因,我们希望将这些图像存储在数据库中,而不是存储在S3或类似文件上。

如果我们的网站图片很重,即Facebook克隆,肯定会将数据存储在数据库中并不是一件好事。

无论如何,它不是,所以这里有一些想要在数据库中存储用户图像的原因:

  • 控制一切:S3停机时间和第三方宝石无法破坏图像处理/图像访问。
  • 轻松删除:如果用户取消了他的帐户,我们可以通过我们的导轨模型(关系依赖关系)轻松删除该帐户的所有关联图像。
  • 更轻松的用户数据导出:当用户想要离开我们的网站并随身携带他的数据时,我们可以更轻松地导出他的图像而不必从S3导出
  • 成本:不是一个重要的论点,但由于我们已经为数据库付费,它将比使用S3的成本(少量)钱便宜。
  • 备份:不是一个重要的参数,但我们的数据库的备份将包括与我们网站相关的所有内容(当然除了RoR代码)。

在Heroku PostgreSQL数据库中存储图像的最简单方法是什么?我们非常欢迎示例代码或指向演练的链接。

谢谢:)

2 个答案:

答案 0 :(得分:9)

我建议您不要使用数据库存储该大小的图像。

S3可以非常有效地备份,并且是extremely hardened。从数据丢失的角度来看,它实际上比使用Heroku的development postgres database计划更安全。

在此示例中,成本方面也不是最佳实践。虽然你是对的,但他们只强制执行行限制,我认为在开发数据库计划中存储大图像(0.5 - 2mb)是不礼貌的。

最后,由于亚马逊的内部网络,从EC2(主办Heroku)转移到S3的速度非常快。

知道这一点,我建议你重新考虑将这种大小的图像存储在数据库中的愿望。有关优缺点的更深入分析,请参阅this question

还有一个关于使用S3和Heroku的dev center article

答案 1 :(得分:4)

正如其他人所提到的,更好的选择是将图像存储在S3或其他东西中。

仍然查看以下链接,以便在Heroku PostgreSQL数据库中存储图像

Upload images in database