32
rails version 5.2

Sidekiq バックグラウンド ジョブで zip ファイルを作成するために、Amazon S3 ストレージを使用して Rails Active Storage のパブリック URL にアクセスする必要があるシナリオがあります。

実際のファイル URL を取得するのに苦労しています。私は試しrails_blob_urlましたが、それは私に次のことを与えます

http://localhost:3000/rails/active_storage/blobs/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBBZUk9IiwiZXhwIjpudWxsLCJwdXIiOiJibG9iX2lkIn19--9598613be650942d1ee4382a44dad679a80d2d3b/sample.pdf

Sidekiq から実際のファイルの URL にアクセスするにはどうすればよいですか?

storage.yml

test:
  service: Disk
  root: <%= Rails.root.join("tmp/storage") %>

local:
  service: Disk
  root: <%= Rails.root.join("storage") %>

development:
  service: S3
  access_key_id: 'xxxxx'
  secret_access_key: 'xxxxx'
  region: 'xxxxx'
  bucket: 'xxxxx'

開発.rb

  config.active_storage.service = :development

これらには Web インターフェースでアクセスできますが、Sidekiq 内ではアクセスできません

4

7 に答える 7

0

少し遅れましたが、次のようにしてパブリック URL を取得することもできます (上記の例のように、単一の header_image が添付された Post モデルを想定しています):

@post.header_image.service.send(:object_for, @post.header_image.key).public_url

2020-04-06 更新

  1. ドキュメントがパブリック ACL で保存されていることを確認する必要があります (たとえば、デフォルトをパブリックに設定する)。

  2. rails_blob_url も使えます。リクエストは Rails によって処理されますが、リクエストごとにプライベート URL を生成する必要があるため、これらのリクエストはおそらく非常に遅くなります。(FYI: コントローラの外では、次のようにその URL を生成することもできますRails.application.routes.url_helpers.rails_blob_url(@post, only_path: true):)

于 2019-02-27T12:54:56.827 に答える