Heroku没有永久文件系统?

Heroku没有永久文件系统?,heroku,Heroku,我目前在Heroku上托管的应用程序允许用户提交照片。起初,我考虑将这些照片存储在文件系统中,因为将它们存储在数据库中显然是一种不好的做法 然而,Heroku上似乎没有永久的文件系统,只有一个短暂的文件系统。这是真的吗?如果是的话,关于存储照片和其他文件,我有哪些选择?这是真的。Heroku允许您创建云应用程序,但这些云应用程序不是“永久的”——它们是可以在Amazon的EC2上复制多次的实例(或“slug”)(这就是为什么Heroku的扩展如此容易的原因)。如果您要推送应用程序的新版本,那么s

我目前在Heroku上托管的应用程序允许用户提交照片。起初,我考虑将这些照片存储在文件系统中,因为将它们存储在数据库中显然是一种不好的做法


然而,Heroku上似乎没有永久的文件系统,只有一个短暂的文件系统。这是真的吗?如果是的话,关于存储照片和其他文件,我有哪些选择?

这是真的。Heroku允许您创建云应用程序,但这些云应用程序不是“永久的”——它们是可以在Amazon的EC2上复制多次的实例(或“slug”)(这就是为什么Heroku的扩展如此容易的原因)。如果您要推送应用程序的新版本,那么slug将被重新编译,并且您在前一个实例中保存到文件系统的任何文件都将丢失

您的最佳选择(无论是在Heroku上还是其他方面)是将用户提交的照片保存到CDN。因为您使用的是Heroku,Heroku使用的是AWS,所以我建议您使用AmazonS3,并可选地启用CloudFront


这是有益的,不仅因为它绕过了Heroku短暂的“限制”,还因为CDN速度更快,将为您的Web应用程序和用户体验提供更好的服务。

根据您使用的技术,您的最佳选择可能是将上传流式传输到S3(亚马逊的存储服务)。您可以使用客户端库与S3交互,以简化文件的发布和检索。Boto是Python的一个示例客户端库——它们适用于所有流行语言

要记住的另一件事是Heroku文件系统也不是共享的。这意味着您必须使用与处理上传的应用程序相同的应用程序(而不是工作进程)将文件放入S3。如果可以,请尝试将上传加载到内存中,不要将其写入磁盘并直接发布到S3。这将提高上传的速度

因为Heroku托管在AWS上,所以到S3的流速度非常快。当您在本地开发时,请记住这一点