discourse/app/jobs/scheduled/clean_up_uploads.rb

26 lines
1.2 KiB
Ruby
Raw Normal View History

2013-10-14 20:27:41 +08:00
module Jobs
class CleanUpUploads < Jobs::Scheduled
every 1.hour
2013-10-14 20:27:41 +08:00
def execute(args)
return unless SiteSetting.clean_up_uploads?
2013-10-14 20:27:41 +08:00
2013-11-28 05:01:41 +08:00
grace_period = [SiteSetting.clean_orphan_uploads_grace_period_hours, 1].max
2013-10-14 20:27:41 +08:00
Upload.where("created_at < ?", grace_period.hour.ago)
.where("retain_hours IS NULL OR created_at < current_timestamp - interval '1 hour' * retain_hours")
2016-06-21 04:05:41 +08:00
.where("id NOT IN (SELECT upload_id FROM post_uploads WHERE upload_id IS NOT NULL)")
.where("id NOT IN (SELECT uploaded_avatar_id FROM users WHERE uploaded_avatar_id IS NOT NULL)")
.where("id NOT IN (SELECT gravatar_upload_id FROM user_avatars WHERE gravatar_upload_id IS NOT NULL)")
.where("url NOT IN (SELECT profile_background FROM user_profiles WHERE LENGTH(COALESCE(profile_background, '')) > 0)")
.where("url NOT IN (SELECT card_background FROM user_profiles WHERE LENGTH(COALESCE(card_background, '')) > 0)")
.where("url NOT IN (SELECT logo_url FROM categories WHERE LENGTH(COALESCE(logo_url, '')) > 0)")
.where("url NOT IN (SELECT background_url FROM categories WHERE LENGTH(COALESCE(background_url, '')) > 0)")
.destroy_all
2013-10-14 20:27:41 +08:00
end
end
end