--- /dev/null
+# frozen_string_literal: true
+
+class Maintenance::UncachePreviewWorker
+ include Sidekiq::Worker
+
+ sidekiq_options queue: 'pull'
+
+ def perform(preview_card_id)
+ preview_card = PreviewCard.find(preview_card_id)
+
+ return if preview_card.image.blank?
+
+ preview_card.image.destroy
+ preview_card.save
+ rescue ActiveRecord::RecordNotFound
+ true
+ end
+end
--- /dev/null
+# frozen_string_literal: true
+
+class Scheduler::PreviewCardsCleanupScheduler
+ include Sidekiq::Worker
+
+ sidekiq_options unique: :until_executed, retry: 0
+
+ def perform
+ Maintenance::UncachePreviewWorker.push_bulk(recent_link_preview_cards.pluck(:id))
+ Maintenance::UncachePreviewWorker.push_bulk(older_preview_cards.pluck(:id))
+ end
+
+ private
+
+ def recent_link_preview_cards
+ PreviewCard.where(type: :link).where('updated_at < ?', 1.month.ago)
+ end
+
+ def older_preview_cards
+ PreviewCard.where('updated_at < ?', 6.months.ago)
+ end
+end
ip_cleanup_scheduler:
cron: '<%= Random.rand(0..59) %> <%= Random.rand(3..5) %> * * *'
class: Scheduler::IpCleanupScheduler
+ preview_cards_cleanup_scheduler:
+ cron: '<%= Random.rand(0..59) %> <%= Random.rand(3..5) %> * * *'
+ class: Scheduler::PreviewCardsCleanupScheduler
email_scheduler:
cron: '0 10 * * 2'
class: Scheduler::EmailScheduler