mirror of
https://github.com/discourse/discourse.git
synced 2024-11-22 14:03:22 +08:00
FEATURE: add rake task that resets ACL on every object in S3
Some previous migrations to S3 may have bad ACLs set on objects. This introduces a new rake task (`rake s3:correct_acl`) that will reset ACL on every S3 object. Vast majority of users will never have to run it, but if you have ACL issues this is the atomic solution.
This commit is contained in:
parent
385829d7be
commit
05a3e3670f
|
@ -101,6 +101,36 @@ def ensure_s3_configured!
|
|||
end
|
||||
end
|
||||
|
||||
task 's3:correct_acl' => :environment do
|
||||
ensure_s3_configured!
|
||||
|
||||
puts "ensuring public-read is set on every upload and optimized image"
|
||||
|
||||
i = 0
|
||||
|
||||
base_url = Discourse.store.absolute_base_url
|
||||
|
||||
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
|
||||
key = url[(base_url.length + 1)..-1]
|
||||
object = Discourse.store.s3_helper.object(key)
|
||||
object.acl.put(acl: "public-read")
|
||||
end
|
||||
if i % 100 == 0
|
||||
puts "#{i} done"
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
task 's3:upload_assets' => :environment do
|
||||
ensure_s3_configured!
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user