From ca89d169467120aaaacf7d833cf8162552b2da55 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9gis=20Hanol?= Date: Mon, 11 May 2015 12:59:50 +0200 Subject: [PATCH] FEATURE: new 'uploads:regenerate_missing_optimized' images rake task --- lib/tasks/uploads.rake | 44 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/lib/tasks/uploads.rake b/lib/tasks/uploads.rake index 86c50f41b02..b709c98feb2 100644 --- a/lib/tasks/uploads.rake +++ b/lib/tasks/uploads.rake @@ -206,3 +206,47 @@ task "uploads:missing" => :environment do end end + +# regenerate missing optimized images +task "uploads:regenerate_missing_optimized" => :environment do + puts "Regenerating missing optimized images for '#{RailsMultisite::ConnectionManagement.current_db}'..." + + if Discourse.store.external? + puts "This task only works for internal storages." + return + end + + public_directory = "#{Rails.root}/public" + missing_uploads = Set.new + + OptimizedImage.includes(:upload) + .where("LENGTH(COALESCE(url, '')) > 0") + .where("width > 0 AND height > 0") + .order(:id) + .find_each do |optimized_image| + + thumbnail = "#{public_directory}#{optimized_image.url}" + upload = "#{public_directory}#{optimized_image.upload.url}" + + if !File.exists?(thumbnail) || File.size(thumbnail) <= 0 + if File.exists?(upload) && File.size(upload) > 0 + FileUtils.mkdir_p(File.dirname(thumbnail)) + OptimizedImage.resize(upload, thumbnail, optimized_image.width, optimized_image.height) + putc "#" + else + missing_uploads << upload + putc "X" + end + else + putc "." + end + end + + puts "", "Done" + + if missing_uploads.size > 0 + puts "Missing uploads:" + missing_uploads.sort.each { |u| puts u } + end + +end