FIX: S3 uploads were missing a cache-control header (#7902)
Admins still need to run the rake task to fix the files who where uploaded previously.
This commit is contained in:
parent
4b9d35cd0e
commit
606c0ed14d
|
@ -43,6 +43,7 @@ module FileStore
|
||||||
cache_file(file, File.basename(path)) if opts[:cache_locally]
|
cache_file(file, File.basename(path)) if opts[:cache_locally]
|
||||||
options = {
|
options = {
|
||||||
acl: opts[:private] ? "private" : "public-read",
|
acl: opts[:private] ? "private" : "public-read",
|
||||||
|
cache_control: 'max-age=31556952, public, immutable',
|
||||||
content_type: opts[:content_type].presence || MiniMime.lookup_by_filename(filename)&.content_type
|
content_type: opts[:content_type].presence || MiniMime.lookup_by_filename(filename)&.content_type
|
||||||
}
|
}
|
||||||
# add a "content disposition" header for "attachments"
|
# add a "content disposition" header for "attachments"
|
||||||
|
|
|
@ -140,6 +140,50 @@ task 's3:correct_acl' => :environment do
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
task 's3:correct_cachecontrol' => :environment do
|
||||||
|
ensure_s3_configured!
|
||||||
|
|
||||||
|
puts "ensuring cache-control is set on every upload and optimized image"
|
||||||
|
|
||||||
|
i = 0
|
||||||
|
|
||||||
|
base_url = Discourse.store.absolute_base_url
|
||||||
|
|
||||||
|
acl = SiteSetting.prevent_anons_from_downloading_files ? 'private' : 'public-read'
|
||||||
|
cache_control = 'max-age=31556952, public, immutable'
|
||||||
|
|
||||||
|
objects = Upload.pluck(:id, :url).map { |array| array << :upload }
|
||||||
|
objects.concat(OptimizedImage.pluck(:id, :url).map { |array| array << :optimized_image })
|
||||||
|
|
||||||
|
puts "#{objects.length} objects found"
|
||||||
|
|
||||||
|
objects.each do |id, url, type|
|
||||||
|
i += 1
|
||||||
|
if !url.start_with?(base_url)
|
||||||
|
puts "Skipping #{type} #{id} since it is not stored on s3, url is #{url}"
|
||||||
|
else
|
||||||
|
begin
|
||||||
|
key = url[(base_url.length + 1)..-1]
|
||||||
|
object = Discourse.store.s3_helper.object(key)
|
||||||
|
object.copy_from(
|
||||||
|
copy_source: "#{object.bucket_name}/#{object.key}",
|
||||||
|
acl: acl,
|
||||||
|
cache_control: cache_control,
|
||||||
|
content_type: object.content_type,
|
||||||
|
content_disposition: object.content_disposition,
|
||||||
|
metadata_directive: 'REPLACE'
|
||||||
|
)
|
||||||
|
rescue => e
|
||||||
|
puts "Skipping #{type} #{id} url is #{url} #{e}"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
if i % 100 == 0
|
||||||
|
puts "#{i} done"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
task 's3:upload_assets' => :environment do
|
task 's3:upload_assets' => :environment do
|
||||||
ensure_s3_configured!
|
ensure_s3_configured!
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue