ユーザー プロファイルの写真を格納するために、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 を同じにする方法についての手がかりがありません。