从本地Paperclip存储迁移到S3

12
我们最近搬到了一个提供有限存储空间的新网络主机上,因此我们正在尝试将所有用户上传的文件(头像、文件等)通过Paperclip gem上传到Amazon S3。我现在正在尝试批量迁移与不同模型对应的几百个文件。
我找到了这个文档,介绍了一个巧妙的Paperclip rake任务: rake paperclip:refresh:missing_styles 这个命令为我完成了部分工作,但我注意到它只设置文件结构而没有发送任何数据 - 此外,在使用has_attached_file调用中的:styles哈希定义的任何缩略图也没有设置。也就是说,我在我的一个模型上有以下的paperclip设置:
class User < ActiveRecord::Base
  has_attached_file :avatar,
    :styles => {
      :thumb => "100x100#",
      :small  => "150x150>",
      :medium => "200x200" }
end

在运行该命令后,以下是一些示例输出:

$ rake paperclip:refresh:missing_styles
Regenerating User -> avatar -> [thumb, :small, :medium]
Regenerating Mercury::Image -> image -> [:medium, :thumb]
Regenerating Profile -> image -> [:home_feature, :large, :medium, :thumb]
Regenerating Page -> preview -> [:portfolio]
Regenerating Category -> default_image -> [:home_feature, :large, :medium, :thumb]

浏览我的S3 Bucket,我可以看到所有目录都设置正确,但只有对于原始图像文件的每个附件,它们的大小都为0字节。我是否误解了此命令的用法?如果没有其他工具可用于批量上传整个目录中的文件到S3,那么是否有一种安全的工具可以覆盖此需求而无需支付费用,我很愿意倾听。我尝试构建一个Ruby脚本并将其插入到他们的SDK中以手动上传这些文件,但是他们的Ruby文档不太好。


纸夹/S3集成对你有用吗?例如,如果你在应用程序上上传了一张全新的图片,它是否最终出现在S3上?回答这个问题是给出任何合理建议所必需的! - LAW
@LAW 美好。唯一的问题是尝试将已经存在的文件放在那里。 - Noz
1个回答

22

看起来我需要在这件事上超越Ruby,s3cmd 似乎是这种工作最合适的工具。在我的情况下,sync 命令解决了问题:

s3cmd sync my-app/public/system/ s3://mybucket 

太棒了。这解决了我所有的资产同步问题。可惜我需要半打独立工具才能让一切正常运作(我确信资产预编译应该可以做到这点)。 - CJBrew

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