0

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 などのさまざまなディレクトリがあります。ドキュメントを確認しましたが、さらにディレクトリを指定する方法が見つかりませんでした。すべてのアップロードはバケット名で終了します。

4

2 に答える 2

1

おそらく、次のようなメタプログラミングを試すことができます。

  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")

于 2020-11-24T04:24:07.950 に答える