我有一个Heroku托管的应用程序,它使用Paperclip在Amazon S3上存储用户照片
我想根据一些内部逻辑将一些(不是全部)文件移动到新的存储桶(该应用程序是多租户的,我将AWS文件存储和我的Postgres数据库分离为单独的租户/模式)
我正在考虑2个选项(如上所示)
此选项是AWS原生的,但它的缺点是不得不担心每个文件的整个文件夹结构(缩略图等)。移动文件涉及移动文件的所有各种样式 - 原始,中等大小,缩略图等。所以它不像复制1个文件那么简单。
它还将所有内容复制到具有完全相同的文件夹/ id结构的新存储桶,我想避免使用,因为用户的相应数据库信息(例如id
)将在我将其迁移时更改postgres DB
这是一个很有吸引力的选择,因为它可以让回形针处理所有工作。
但是,paperclip使用存储桶名称来构造文件的URL。我需要它从1个桶中拉出来并推到另一个桶中。有没有办法为每笔交易单独设置bucket
名称?
答案 0 :(得分:1)
Paperclip使用存储桶名称来构造远程文件的URL,但这些目录和文件的名称并不取决于存储桶名称。如果你的文件或目录包含存储桶名称,那么你做错了,你应该先修复它。
执行以下操作:
使用public/system
命令将您的oldbucket
目录与aws s3 sync OLD_BUCKET_URL public/system
同步
使用Paperclip使用Ruby脚本在本地执行目录和文件的更改
使用public/system
命令将newbucket
目录与aws s3 sync public/system NEW_BUCKET_URL
同步(上传)。