Active Storage,指定一个Google存储桶目录?

时间:2018-05-29 21:46:13

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

我一直在Rails 5.2上实施Active Storage Google策略,目前我能够使用rails控制台上传文件而没有任何问题,我唯一缺少的是如果有办法指定一个存储桶内的目录。现在我上传如下

bk.file.attach(io: File.open(bk.source_dir.to_s), filename: "file.tar.gz", content_type: "application/x-tar")

我的storage.yml上的配置

google:
  service: GCS
  project: my-project 
  credentials: <%= Rails.root.join("config/myfile.json") %>
  bucket: bucketname

但在我的桶中有不同的目录,如bucketname / department1等。我浏览过文档并且没有找到指定更多目录的方法,我的所有上传文件都以存储桶名称结尾。

2 个答案:

答案 0 :(得分:1)

抱歉,我担心Active Storage不支持。您打算使用可以专门使用的存储桶配置Active Storage。

答案 1 :(得分:0)

也许您可以尝试元编程,如下所示:

  1. 创建config / initializers / active_storage_service.rb将set_bucket方法添加到ActiveStorage :: Service
module Methods
  def set_bucket(bucket_name)
    # update config bucket
    config[:bucket] = bucket_name

    # update current bucket
    @bucket = client.bucket(bucket_name, skip_lookup: true)
  end
end
ActiveStorage::Service.class_eval { include Methods }
  1. 在上传或下载文件之前更新存储桶
ActiveStorage::Blob.service.set_bucket "my_bucket_name"

bk.file.attach(io: File.open(bk.source_dir.to_s), filename: "file.tar.gz", content_type: "application/x-tar")