【问题标题】:CarrierWave save image to gridfs and upload in background s3CarrierWave 将图像保存到 gridfs 并在后台 s3 上传
【发布时间】:2013-07-26 12:28:12
【问题描述】:

有什么方法可以将图片保存到mongo的gridfs中,并在后台异步上传到S3之后?

也许可以链接上传者?

接下来的问题:使用了多个服务器,因此 - 保存到硬盘映像和运行的后台进程可以在不同的服务器上。

还有 1.上传到s3时应该从gridfs中删除 2. 当对应实体被销毁时,它应该自动从s3中删除。

谢谢。

【问题讨论】:

  • 不确定但看看this是否有帮助

标签: mongodb amazon-s3 mongoid carrierwave gridfs


【解决方案1】:

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

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

可尾游标的美妙之处在于它允许异步操作 - 您可以让另一个进程监视不同服务器上的 oplog 并执行适当的操作。

【讨论】:

  • 我有一些应用服务器。下一个想法:首先上传到gridfs(不是本地文件系统),然后上传到s3(来自gridfs)。通过 Resque 在后台上传到 s3。文件系统在这种情况下不起作用,因为 Resque 可以在其他机器上运行,而不是在包含文件的机器上运行。因此,gridfs 就像全局可访问的存储。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2016-04-15
    • 1970-01-01
    • 2012-07-08
    • 1970-01-01
    • 2012-06-19
    • 2013-03-07
    • 1970-01-01
    • 2015-03-15
    • 2015-05-16
    相关资源
    最近更新 更多