使用Paperclip

时间:2016-02-16 21:06:23

标签: ruby-on-rails heroku amazon-s3 paperclip

我有一个Heroku托管的应用程序,它使用Paperclip在Amazon S3上存储用户照片

我想根据一些内部逻辑将一些(不是全部)文件移动到新的存储桶(该应用程序是多租户的,我将AWS文件存储和我的Postgres数据库分离为单独的租户/模式)

enter image description here

我正在考虑2个选项(如上所示)

选项1 - 使用AWS Cli直接在存储桶之间移动文件

此选项是AWS原生的,但它的缺点是不得不担心每个文件的整个文件夹结构(缩略图等)。移动文件涉及移动文件的所有各种样式 - 原始,中等大小,缩略图等。所以它不像复制1个文件那么简单。

它还将所有内容复制到具有完全相同的文件夹/ id结构的新存储桶,我想避免使用,因为用户的相应数据库信息(例如id)将在我将其迁移时更改postgres DB

选项2 - 使用回形针在本地下拉每个文件并重新上传

这是一个很有吸引力的选择,因为它可以让回形针处理所有工作。

但是,paperclip使用存储桶名称来构造文件的URL。我需要它从1个桶中拉出来并推到另一个桶中。有没有办法为每笔交易单独设置bucket名称?

1 个答案:

答案 0 :(得分:1)

Paperclip使用存储桶名称来构造远程文件的URL,但这些目录和文件的名称并不取决于存储桶名称。如果你的文件或目录包含存储桶名称,那么你做错了,你应该先修复它。

执行以下操作:

  1. 使用public/system命令将您的oldbucket目录与aws s3 sync OLD_BUCKET_URL public/system同步

  2. 使用Paperclip使用Ruby脚本在本地执行目录和文件的更改

  3. 使用public/system命令将newbucket目录与aws s3 sync public/system NEW_BUCKET_URL同步(上传)。