我目前在Heroku上托管的应用程序允许用户提交照片.最初,我正在考虑将这些照片存储在文件系统中,因为将它们存储在数据库中显然是不好的做法.
然而,似乎Heroku上没有永久文件系统,只是一个短暂的文件系统.这是真的,如果是这样,我在存储照片和其他文件方面有哪些选择?
red*_*nce 19
是真的.Heroku允许您创建云应用程序,但这些云应用程序不是"永久性的" - 它们是可以在Amazon的EC2上多次复制的实例(或"slu"")(这就是为什么使用Heroku可以轻松扩展).如果您要推送新版本的应用程序,那么将重新编译slug,并且您在上一个实例中保存到文件系统的所有文件都将丢失.
您最好的选择(无论是在Heroku上还是其他方式)是将用户提交的照片保存到CDN.由于您使用Heroku,而Heroku使用AWS,我建议使用Amazon S3,并可选择启用CloudFront.
这是有益的,不仅因为它克服了Heroku的短暂"限制",而且因为CDN更快,并且将为您的用户提供更好的webapp和体验服务.
根据您使用的技术,您最好的选择是将上传流式传输到S3(亚马逊的存储服务).您可以使用客户端库与S3进行交互,以便发布和检索文件.Boto是Python的示例客户端库 - 它们适用于所有流行语言.
要记住的另一件事是Heroku文件系统也不共享.这意味着您必须使用与处理上载的应用程序相同的应用程序(而不是工作进程)将文件放入S3.如果可以,尝试将上传内容加载到内存中,永远不要将其写入磁盘并直接发布到S3.这将提高您上传的速度.
由于Heroku托管在AWS上,因此S3的流程发生速度非常快.在本地开发时请记住这一点.
| 归档时间: |
|
| 查看次数: |
5558 次 |
| 最近记录: |