CarrierWave将图像保存到gridfs并在后台s3上传

时间:2013-07-26 12:28:13

标签: mongodb amazon-s3 mongoid carrierwave gridfs

有没有办法将图像保存到mongo的gridfs并在后台异步上传到S3后?

也许有可能连锁上传者?

下一个问题:因此使用多个服务器 - 保存到硬盘驱动器映像并运行后台进程可以在不同的服务器上。

另外   1.上传到s3时应从gridfs中删除   2.当相应的实体被销毁时,它应自动从s3中删除。

感谢。

2 个答案:

答案 0 :(得分:1)

您的部署架构是什么样的?当你说“多个服务器”时,我有点困惑 - 你的意思是多个mongod实例吗?此外,当您指定要求时,它会有点混乱。根据要求1,如果您上传到S3,则应删除gridfs文件。但是,根据您的要求,它不能同时存在于S3和Gridfs中,因此需求2似乎与第一个相矛盾,即它首先不应存在于gridfs中。你在Gridfs和S3上保留了一些文件吗?

如果您在副本集或分片群集中运行,则可以在gridfs集合上创建tailable cursor(您也可以在单个节点上执行此操作,但不建议这样做)。当您看到插入操作(看起来像'op':'i')时,您可以执行脚本或在应用程序中执行某些操作以从gridfs中获取文件并将相应的文件推送到s3。同样,当您看到删除操作('op':'d')时,您可以从s3中立即删除该文件。

tailable游标的优点在于它允许异步操作 - 您可以让另一个进程监视不同服务器上的oplog并执行相应的操作。

答案 1 :(得分:0)

我使用temp变量存储到gridfs并使Worker(请参阅this)执行从gridfs到s3的异步上传。

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