diff --git a/app/jobs/onceoff.rb b/app/jobs/onceoff.rb index 79872fc20..a27304cce 100644 --- a/app/jobs/onceoff.rb +++ b/app/jobs/onceoff.rb @@ -10,15 +10,21 @@ class Jobs::Onceoff < Jobs::Base job_name = self.class.name_for(self.class) if args[:force] || !OnceoffLog.where(job_name: job_name).exists? - execute_onceoff(args) - OnceoffLog.create(job_name: job_name) + DistributedMutex.synchronize(self.class.name) do + execute_onceoff(args) + OnceoffLog.create(job_name: job_name) + end end end def self.enqueue_all + previously_ran = OnceoffLog.pluck(:job_name).uniq + ObjectSpace.each_object(Class).select { |klass| klass < self }.each do |klass| - job_name = name_for(klass).underscore.to_sym - Jobs.enqueue(job_name) + job_name = name_for(klass) + unless previously_ran.include?(job_name) + Jobs.enqueue(job_name.underscore.to_sym) + end end end diff --git a/app/jobs/scheduled/enqueue_onceoffs.rb b/app/jobs/scheduled/enqueue_onceoffs.rb new file mode 100644 index 000000000..9afd19d11 --- /dev/null +++ b/app/jobs/scheduled/enqueue_onceoffs.rb @@ -0,0 +1,11 @@ +module Jobs + + class EnqueueOnceoffs < Jobs::Scheduled + every 10.minutes + + def execute(args) + Jobs::Onceoff.enqueue_all + end + end + +end diff --git a/lib/tasks/db.rake b/lib/tasks/db.rake index 7249afa37..e6c479365 100644 --- a/lib/tasks/db.rake +++ b/lib/tasks/db.rake @@ -7,8 +7,6 @@ end task 'db:migrate' => ['environment', 'set_locale'] do SeedFu.seed - Jobs::Onceoff.enqueue_all - SiteSetting.last_vacuum = Time.now.to_i if SiteSetting.last_vacuum == 0 if SiteSetting.vacuum_db_days > 0 &&