diff --git a/app/jobs/cron/pjs_migration_cron_job.rb b/app/jobs/cron/pjs_migration_cron_job.rb new file mode 100644 index 000000000..afe3f543c --- /dev/null +++ b/app/jobs/cron/pjs_migration_cron_job.rb @@ -0,0 +1,26 @@ +class Cron::PjsMigrationCronJob < Cron::CronJob + self.schedule_expression = "every 15 minutes" + + def perform(*args) + # avoid reschedule enqueued jobs + # but ignore fail jobs + return if migration_jobs.count > 100 + + blobs = ActiveStorage::Blob + .where.not("key LIKE '%/%'") + .limit(200_000) + + blobs.in_batches { |batch| batch.ids.each { |id| PjsMigrationJob.perform_later(id) } } + end + + def self.schedulable? + ENV.fetch("MIGRATE_PJS", "enabled") == "enabled" + end + + private + + def migration_jobs + Delayed::Job + .where(queue: 'pj_migration_jobs') + end +end