mirror of
https://github.com/discourse/discourse.git
synced 2025-06-06 23:07:28 +08:00
rework the uploads:migrate_from_s3 rake task
This commit is contained in:
@ -117,51 +117,42 @@ def migrate_from_s3
|
|||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
# make sure S3 bucket is set
|
|
||||||
if SiteSetting.Upload.s3_upload_bucket.blank?
|
|
||||||
puts "The S3 upload bucket must be set before running that task."
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
db = RailsMultisite::ConnectionManagement.current_db
|
db = RailsMultisite::ConnectionManagement.current_db
|
||||||
|
|
||||||
puts "Migrating uploads from S3 to local storage for '#{db}'..."
|
puts "Migrating uploads from S3 to local storage for '#{db}'..."
|
||||||
|
|
||||||
s3_base_url = FileStore::S3Store.new.absolute_base_url
|
|
||||||
max_file_size_kb = [SiteSetting.max_image_size_kb, SiteSetting.max_attachment_size_kb].max.kilobytes
|
max_file_size_kb = [SiteSetting.max_image_size_kb, SiteSetting.max_attachment_size_kb].max.kilobytes
|
||||||
|
|
||||||
Post.unscoped.find_each do |post|
|
Post.where("raw LIKE '%.s3%.amazonaws.com/%'").find_each do |post|
|
||||||
if post.raw[s3_base_url]
|
begin
|
||||||
post.raw.scan(/(#{Regexp.escape(s3_base_url)}\/(\d+)(\h{40})\.\w+)/).each do |url, id, sha|
|
updated = false
|
||||||
|
|
||||||
|
post.raw.gsub(/(\/\/[\w.-]+amazonaws\.com\/(original|optimized)\/([a-z0-9]+\/)+\h{40}([\w.-]+)?)/i) do |url|
|
||||||
begin
|
begin
|
||||||
puts "POST ID: #{post.id}"
|
|
||||||
puts "UPLOAD ID: #{id}"
|
|
||||||
puts "UPLOAD SHA: #{sha}"
|
|
||||||
puts "UPLOAD URL: #{url}"
|
|
||||||
if filename = guess_filename(url, post.raw)
|
if filename = guess_filename(url, post.raw)
|
||||||
puts "FILENAME: #{filename}"
|
file = FileHelper.download("http:#{url}", max_file_size: 20.megabytes, tmp_file_name: "from_s3", follow_redirects: true)
|
||||||
file = FileHelper.download(
|
new_upload = UploadCreator.new(file, filename).create_for(post.user_id || -1)
|
||||||
"http:#{url}",
|
if new_upload&.save
|
||||||
max_file_size: 20.megabytes,
|
updated = true
|
||||||
tmp_file_name: "from_s3",
|
return new_upload.url
|
||||||
follow_redirect: true
|
end
|
||||||
)
|
end
|
||||||
if upload = UploadCreator.new(file, filename).create_for(post.user_id || -1)
|
|
||||||
post.raw = post.raw.gsub(/(https?:)?#{Regexp.escape(url)}/, upload.url)
|
url
|
||||||
post.save
|
rescue
|
||||||
|
url
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
if updated
|
||||||
|
post.save!
|
||||||
post.rebake!
|
post.rebake!
|
||||||
puts "OK :)"
|
putc "#"
|
||||||
else
|
else
|
||||||
puts "KO :("
|
putc "."
|
||||||
end
|
|
||||||
puts post.full_url, ""
|
|
||||||
else
|
|
||||||
puts "NO FILENAME :("
|
|
||||||
end
|
|
||||||
rescue => e
|
|
||||||
puts "EXCEPTION: #{e.message}"
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
rescue
|
||||||
|
putc "X"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user