From 41cd438f0b78638b3c701ca9145a5877de0b89b8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9gis=20Hanol?= Date: Fri, 22 May 2015 20:28:52 +0200 Subject: [PATCH] FIX: 'clean up uploads' job Only 1 query was needed. --- app/jobs/scheduled/clean_up_uploads.rb | 27 ++++++++++---------------- 1 file changed, 10 insertions(+), 17 deletions(-) diff --git a/app/jobs/scheduled/clean_up_uploads.rb b/app/jobs/scheduled/clean_up_uploads.rb index 3bbe10856a2..ef05762bd2b 100644 --- a/app/jobs/scheduled/clean_up_uploads.rb +++ b/app/jobs/scheduled/clean_up_uploads.rb @@ -6,25 +6,18 @@ module Jobs def execute(args) return unless SiteSetting.clean_up_uploads? - ignore_urls = [] - ignore_urls << UserProfile.uniq.where("profile_background IS NOT NULL AND profile_background != ''").pluck(:profile_background) - ignore_urls << UserProfile.uniq.where("card_background IS NOT NULL AND card_background != ''").pluck(:card_background) - ignore_urls << Category.uniq.where("logo_url IS NOT NULL AND logo_url != ''").pluck(:logo_url) - ignore_urls << Category.uniq.where("background_url IS NOT NULL AND background_url != ''").pluck(:background_url) - ignore_urls.flatten! - grace_period = [SiteSetting.clean_orphan_uploads_grace_period_hours, 1].max - Upload.where("created_at < ? AND - (retain_hours IS NULL OR created_at < current_timestamp - interval '1 hour' * retain_hours )", grace_period.hour.ago) - .where("id NOT IN (SELECT upload_id from post_uploads)") - .where("id NOT IN (SELECT custom_upload_id from user_avatars)") - .where("id NOT IN (SELECT gravatar_upload_id from user_avatars)") - .where("url NOT IN (?)", ignore_urls) - .find_each do |upload| - upload.destroy - end - + Upload.where("created_at < ?", grace_period.hour.ago) + .where("retain_hours IS NULL OR created_at < current_timestamp - interval '1 hour' * retain_hours") + .where("id NOT IN (SELECT upload_id FROM post_uploads)") + .where("id NOT IN (SELECT uploaded_avatar_id FROM users)") + .where("id NOT IN (SELECT gravatar_upload_id FROM user_avatars)") + .where("url NOT IN (SELECT profile_background FROM user_profiles)") + .where("url NOT IN (SELECT card_background FROM user_profiles)") + .where("url NOT IN (SELECT logo_url FROM categories)") + .where("url NOT IN (SELECT background_url FROM categories)") + .destroy_all end end