CarrierWave将图片保存到GridFS并在后台上传到S3

5
有没有办法将图像保存到Mongo的GridFS中,然后在后台异步上传到S3?也许可以链接上传器?
问题是:使用了多个服务器,因此,保存在硬盘上的图像和正在运行的后台进程可能在不同的服务器上。
此外: 1.上传到S3后应从GridFS中删除 2.对应实体销毁时应自动从S3中删除
谢谢。

不确定,但可以看看这个是否有帮助。 - Viren
2个回答

1
你们的部署架构是什么样子的?当你说“多台服务器”时,我有点困惑,你是指多个mongod实例吗?同时,你的需求说明有些让人困惑。根据要求1,如果你上传到S3,则GridFS文件应该被删除。然而,根据你的要求,它不能同时存在于S3和GridFS中,因此,要求2似乎与第一个要求相矛盾,也就是说,它本身就不应该存在于GridFS中。你是否在GridFS和S3上保存一些文件?
如果你正在运行副本集或分片集群,你可以在你的GridFS集合上创建一个tailable cursor(尽管不建议在单个节点上这样做)。当你看到插入操作时(看起来像'op':'i'),你可以执行一个脚本或在你的应用程序中执行某些操作,从GridFS获取文件并将适当的文件推送到S3。同样地,当你看到删除操作('op':'d')时,你可以立即从S3中删除该文件。
tailable游标的优美之处在于它允许异步操作-你可以在另一台服务器上监视oplog并执行相应的操作。

我有一些应用服务器。下一个想法是:首先上传到GridFS(而不是本地文件系统),然后再上传到S3(从GridFS)。通过Resque在后台上传到S3。在这种情况下,文件系统无法工作,因为Resque可以在其他计算机上运行,而不是包含文件的计算机上运行。因此,GridFS就像全局可访问的存储空间。 - Kirill Salykin

0

我使用了临时变量来存储到gridfs,并创建了Worker(参见this)来执行从gridfs到s3的异步上传。

希望这能对某人有所帮助,谢谢。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接