我目前在Heroku上托管的应用程序允许用户提交照片。最初,我考虑将这些照片存储在文件系统中,因为将它们存储在数据库中显然是不好的做法。然而,Heroku上似乎没有永久的文件系统,只有一个短暂的文件系统。这是真的吗?如果是,我在存储照片和其他文件方面有什么选择?
rkttyhzu1#
这是真的。Heroku允许您创建云应用程序,但这些云应用程序不是“永久的”-它们是可以在Amazon的EC2上多次复制的示例(或“slug”)(这就是为什么使用Heroku扩展如此容易)。如果你要推送一个新版本的应用,那么slug将被重新编译,你在前一个示例中保存到文件系统的任何文件都将丢失。你最好的选择(无论是在Heroku上还是其他地方)是将用户提交的照片保存到CDN。由于您在Heroku上,Heroku使用AWS,我建议您使用Amazon S3,并可以选择启用CloudFront。这是有益的,不仅因为它绕过了Heroku短暂的“限制”,而且因为CDN更快,并且将为您的Web应用程序提供更好的服务,并为您的用户提供更好的体验。
0lvr5msh2#
根据您使用的技术,您最好的选择可能是将上传内容流式传输到S3(亚马逊的存储服务)。您可以使用客户端库与S3交互,以简化文件的发布和检索。Boto是Python的一个示例客户端库--它们存在于所有流行的语言中。另一件需要记住的事情是Heroku文件系统也不是共享的。这意味着您必须使用与处理上传的应用程序相同的应用程序(而不是工作进程)将文件放到S3。如果可以的话,尝试将上传的内容加载到内存中,不要将其写入磁盘,而是直接发送到S3。这将提高您的上传速度。由于Heroku托管在AWS上,因此流到S3的速度非常快。当你在当地发展的时候要记住这一点。
2条答案
按热度按时间rkttyhzu1#
这是真的。Heroku允许您创建云应用程序,但这些云应用程序不是“永久的”-它们是可以在Amazon的EC2上多次复制的示例(或“slug”)(这就是为什么使用Heroku扩展如此容易)。如果你要推送一个新版本的应用,那么slug将被重新编译,你在前一个示例中保存到文件系统的任何文件都将丢失。
你最好的选择(无论是在Heroku上还是其他地方)是将用户提交的照片保存到CDN。由于您在Heroku上,Heroku使用AWS,我建议您使用Amazon S3,并可以选择启用CloudFront。
这是有益的,不仅因为它绕过了Heroku短暂的“限制”,而且因为CDN更快,并且将为您的Web应用程序提供更好的服务,并为您的用户提供更好的体验。
0lvr5msh2#
根据您使用的技术,您最好的选择可能是将上传内容流式传输到S3(亚马逊的存储服务)。您可以使用客户端库与S3交互,以简化文件的发布和检索。Boto是Python的一个示例客户端库--它们存在于所有流行的语言中。
另一件需要记住的事情是Heroku文件系统也不是共享的。这意味着您必须使用与处理上传的应用程序相同的应用程序(而不是工作进程)将文件放到S3。如果可以的话,尝试将上传的内容加载到内存中,不要将其写入磁盘,而是直接发送到S3。这将提高您的上传速度。
由于Heroku托管在AWS上,因此流到S3的速度非常快。当你在当地发展的时候要记住这一点。