From b0bb1d95a5dfdf9106acf51eb34bc504867edfe4 Mon Sep 17 00:00:00 2001 From: Vinoth Kannan Date: Thu, 25 Apr 2019 01:16:18 +0530 Subject: [PATCH] trying to recover old scheme uploads on 'posts:missing_uploads' rake task --- lib/tasks/posts.rake | 51 +++++++++++++++++++++++++++++++++----------- 1 file changed, 38 insertions(+), 13 deletions(-) diff --git a/lib/tasks/posts.rake b/lib/tasks/posts.rake index c996d2c1812..dfca963a88e 100644 --- a/lib/tasks/posts.rake +++ b/lib/tasks/posts.rake @@ -1,3 +1,5 @@ +require 'file_store/local_store' + desc 'Update each post with latest markdown' task 'posts:rebake' => :environment do ENV['RAILS_DB'] ? rebake_posts : rebake_posts_all_sites @@ -402,9 +404,7 @@ desc 'Finds missing post upload records from cooked HTML content' task 'posts:missing_uploads' => :environment do get_missing_uploads.delete_all missing_uploads = [] - found_uploads = [] old_scheme_upload_count = 0 - unlinked_post_upload_count = 0 count = 0 Post.have_uploads.select(:id, :cooked).find_in_batches do |posts| @@ -436,21 +436,47 @@ task 'posts:missing_uploads' => :environment do end if sha1.blank? || sha1s.exclude?(sha1) - missing_post_uploads << src + upload_id = nil - if found_uploads.include?(src) - unlinked_post_upload_count += 1 - elsif missing_uploads.exclude?(src) + if missing_uploads.exclude?(src) if sha1.blank? - old_scheme_upload_count += 1 - missing_uploads << src - elsif Upload.exists?(sha1: sha1) - unlinked_post_upload_count += 1 - found_uploads << src + # recovering old scheme upload. + local_store = FileStore::LocalStore.new + public_path = "#{local_store.public_dir}#{path}" + if File.exists?(public_path) + tmp = Tempfile.new + tmp.write(File.read(public_path)) + tmp.rewind + + if upload = UploadCreator.new(tmp, File.basename(path)).create_for(Discourse.system_user.id) + upload_id = upload.id + DbHelper.remap(UrlHelper.absolute(src), upload.url) + + post.raw.gsub!(src, upload.url) + post.cooked.gsub!(src, upload.url) + + if post.changed? + post.save!(validate: false) + post.rebake! + end + end + + FileUtils.rm(tmp, force: true) + else + old_scheme_upload_count += 1 + end + else + upload_id = Upload.where(sha1: sha1).pluck(:id).first + end + + if upload_id.present? + PostUpload.create!(post_id: post.id, upload_id: upload_id) else missing_uploads << src end end + + missing_post_uploads << src if upload_id.blank? end end @@ -464,10 +490,9 @@ task 'posts:missing_uploads' => :environment do end end - puts "", "#{count - unlinked_post_upload_count} post uploads are missing.", "" + puts "", "#{count} post uploads are missing.", "" if count > 0 - puts "#{unlinked_post_upload_count} are unlinked post uploads." if unlinked_post_upload_count > 0 puts "#{missing_uploads.count} uploads are missing." puts "#{old_scheme_upload_count} of #{missing_uploads.count} are old scheme uploads." if old_scheme_upload_count > 0 puts "#{get_missing_uploads.count} of #{Post.count} posts are affected.", ""