【问题标题】:How to migrate local storage (active storage) to google cloud storage如何将本地存储(活动存储)迁移到谷歌云存储
【发布时间】:2021-01-04 09:14:10
【问题描述】:

我正在尝试在谷歌云上迁移我的 rails 应用程序。 我已将活动存储与 GCS 上创建的存储桶连接起来。 我已经上传了存储桶中的文件夹“storage”,但是应用程序中的所有图像都有404错误。

如何正确迁移 GCS 中的本地存储文件夹?

谢谢你的建议

【问题讨论】:

标签: ruby-on-rails google-cloud-platform google-cloud-storage


【解决方案1】:

这个问题与this 非常相似,正如该线程中提到的那样:

DiskService 使用的文件夹结构与 google 上的云存储服务不同。

DiskService 将密钥的第一个字符的一部分用作文件夹。云服务只需使用密钥并将所有变体放在单独的文件夹中。

您可以创建一个 rake 任务将文件复制到云存储,例如:

namespace :active_storage do
  desc "Migrates active storage local files to cloud"
    task migrate_local_to_cloud: :environment do
      raise 'Missing storage_config param' if !ENV.has_key?('storage_config')

      require 'yaml'
      require 'erb'
      require 'google/cloud/storage'

      config_file = Pathname.new(Rails.root.join('config/storage.yml'))
      configs = YAML.load(ERB.new(config_file.read).result) || {}
      config = configs[ENV['storage_config']]

      client = Google::Cloud.storage(config['project'], config['credentials'])
      bucket = client.bucket(config.fetch('bucket'))

      ActiveStorage::Blob.find_each do |blob|
        key = blob.key
        folder = [key[0..1], key[2..3]].join('/')
        file_path = Rails.root.join('storage', folder.to_s, key)
        file = File.open(file_path, 'rb')
        md5 = Digest::MD5.base64digest(file.read)
        bucket.create_file(file, key, content_type: blob.content_type, md5: md5)
        file.close
        puts key
      end
    end
  end

执行为:rails active_storage:migrate_local_to_cloud storage_config=google。

您可以在 here 找到有用的文档。

【讨论】:

    【解决方案2】:

    我会编写一个迁移并遍历所有具有附件的模型,并使用目录中的本地文件“重新分配”当前图像,以便与 GCS 同步。还可以查看Active Storage guide

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-16
      • 2018-10-11
      • 2019-09-22
      • 1970-01-01
      • 2015-02-03
      • 1970-01-01
      • 2019-08-03
      • 2016-10-12
      相关资源
      最近更新 更多