1

ユーザー プロファイルの写真を格納するために、s3 にプライベート バケットを作成しました。パブリック バケットを使用すると、すべての画像が適切にキャッシュされます (同じ設定の以前のペーパークリップ構成)。

私は次の神社初期化子を持っています:

s3_options = {
  access_key_id: ENV['AWS_ACCESS_KEY_ID'],
  secret_access_key: ENV['AWS_SECRET_ACCESS_KEY'],
  region: ENV['AWS_REGION'],
  bucket: ENV['S3_BUCKET_NAME']
}

Shrine.storages = {
  cache: Shrine::Storage::FileSystem.new('tmp', prefix: 'uploads/cache'),
  store: Shrine::Storage::S3.new(**s3_options)
}

Shrine.plugin :activerecord
Shrine.plugin :logging
Shrine.plugin :determine_mime_type
Shrine.plugin :cached_attachment_data
Shrine.plugin :restore_cached_data
Shrine.plugin :delete_promoted
Shrine.plugin :delete_raw
Shrine.plugin :remove_invalid

そして、次のアップローダ:

class AvatarUploader < Shrine
  plugin :pretty_location
  plugin :processing
  plugin :upload_options, store: {
    acl: 'private',
    cache_control: "max-age=604800",
  }
end

CacheControl は s3 オブジェクトで 1 週間に適切に設定され、同じことが応答に表示されます。X-Amz-Signatureハッシュに関して、リクエストごとに署名付き URL が異なることに気付きました。これがキャッシュ ミスの原因となる可能性が最も高いです (Etag は各リクエストで同じです)。これが機能しない理由だと思いますが、オブジェクトの有効期限が切れていないときに X-Amz-Signature を同じにする方法についての手がかりがありません。

4

1 に答える 1