没有Heroku的永久文件系统



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

然而,Heroku上似乎并没有永久的文件系统,只有一个短暂的文件系统。这是真的吗?如果是,我在存储照片和其他文件方面有什么选择?

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

您的最佳选择(无论是在Heroku还是其他平台上)是将用户提交的照片保存到CDN。由于您在Heroku上,并且Heroku使用AWS,我建议您使用Amazon S3,并可选择启用CloudFront。

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

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

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

因为Heroku托管在AWS上,所以S3的流以非常高的速度发生。当你在当地发展时,请记住这一点。

最新更新