当前位置: 首页 > 知识库问答 >
问题:

将活动存储从本地磁盘服务迁移到gcs云

严阳夏
2023-03-14

我试图迁移我的本地主动存储文件到谷歌云存储。我试图只是复制文件的/存储/*到我的GCS桶-但它似乎不工作。

我发现404未找到错误,因为它正在搜索以下文件:[bucket]/variants/ptGtmNWuTE…

我的本地存储目录有一个完全不同的文件夹结构,其中包含以下文件夹:/storage/1R/3o/NWuT…

我检索图像的方法如下:

variant = attachment.variant(resize: '100x100').processed
url_for(variant)

我错过了什么?

共有1个答案

权胜泫
2023-03-14

事实证明,DiskService也就是。本地存储使用与云服务不同的文件夹结构。这真的很奇怪。

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

创建了一个rake任务来将文件复制到云服务。用railsactive_storage运行它:migrate_local_to_cloudstorage_config=google

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
 类似资料:
  • 早些时候,我的文件上载到存储文件夹中。但是现在我想在s3存储桶上上传图像。如何迁移s3存储桶上现有的本地数据? 我在这里找到了脚本https://www.stefanwienert.de/blog/2018/11/05/active-storage-migrate-between-providers-from-local-to-amazon/但是得到了一个错误 为活动存储调用私有方法打开 那么,我

  • 我正在尝试在谷歌云上迁移我的rails应用程序。我已将活动存储与地面军事系统上创建的存储桶连接起来。我上传了bucket中的文件夹“storage”,但应用程序中的所有图像都有404错误。 如何正确迁移GCS中的本地存储文件夹? 谢谢你的建议

  • 现在,每次运行脚本时,我都会导入一个相当大的作为数据文件。是否有一个很好的解决方案来保持dataframe在运行之间始终可用,这样我就不必花费所有的时间等待脚本运行?

  • 问题内容: 我有一个长度为2.2亿(固定)的int和float数组。现在,我想将这些阵列存储到内存和磁盘/从内存和磁盘上载。目前,我正在使用Java NIO的FileChannel和MappedByteBuffer解决此问题。它可以正常工作,但大约需要5秒钟(Wall Clock Time)(用于将阵列存储到内存或从内存上载到磁盘或从磁盘上载到磁盘)。实际上,我想要一个更快的。有人可以帮我吗,有没

  • 如EhCache留档所述: 实际上,这意味着持久性内存中缓存将启动,其所有元素都将在磁盘上。[...]因此,Ehcache设计不会在启动时将它们全部加载到内存中,而是根据需要懒惰地加载它们。 我希望内存缓存启动时将所有元素都存储在内存中,我该如何实现? 这是因为我们的网站对缓存执行了大量的访问,所以我们第一次访问网站时,它的响应时间非常长。

  • 目前,我们正在使用负载均衡器类型的srecice将外部请求路由到我们的一个pod。 我们希望将其移动到入口类型服务(已经有一个外部负载均衡器设置以及一个入口控制器-并且我们确实有其他Pod配置为通过此入口控制器接收外部请求) 我们现在拥有的是客户端用于外部连接的以下url: 我们想把它移到 这样,我们可以释放负载均衡器IP并且不需要特定的端口。我们确实想在一段时间内同时支持两个url-因为客户端已