首页 > 解决方案 > Rails Active Storage - 如何将本地文件迁移到 s3 存储桶

问题描述

早些时候我的文件上传到存储文件夹中。但现在我想在 s3 存储桶上上传图片。如何迁移 s3 存储桶上的现有本地数据?

我在这里找到了脚本https://www.stefanwienert.de/blog/2018/11/05/active-storage-migrate-between-providers-from-local-to-amazon/ 但是得到一个错误

NoMethodError(为 Active Storage 调用私有方法 `open'

那么如何将本地数据迁移到 s3 存储桶呢?

有没有更简单的方法?

标签: ruby-on-railsamazon-s3rails-activestorage

解决方案


一种更简单的方法:

  • 将一个amazon部分添加到您的config/storage.yml

喜欢

  • 将您的存储服务更改:amazonconfig/environments/production.rb

  • 将此 rake 任务添加为lib/tasks/storage.yml

namespace :storage do
  task reupload: :environment do
    [User, Event].each do |clazz|
      collection = clazz.with_attached_image

      puts "#{clazz} has #{collection.count} images"

      collection.find_each do |user|
        next unless user.image.blob
        user
          .image
          .blob
          .open do |f|
            user.image.attach(io: f, filename: user.image.blob.filename)
          end

        print "."
      end

      puts
    end
  end
end
  • 在本地运行和测试以尝试rake storage:reupload(并更改为config.active_storage.service = :amazonin config/environments/development.rb

  • 检查本地是否一切正常(您的图像应链接到您的 AWS URL)

  • 上传到您的服务器(cap deploy例如)

  • RAILS_ENV=production bundle exec rake storage:reupload在你的项目目录中运行

  • 稍等一下,具体取决于您要重新上传的图像数量

  • 利润!享受!晚会时间!

优点

缺点

  • 没有让它工作,has_many_attached但不应该有太多的变化
  • 你必须选择你的模型
  • 它假设它都是命名的image(没有什么太难修复的)

推荐阅读