From 3f7ced9236e3d65cee3528d685efeb8764802f1f Mon Sep 17 00:00:00 2001 From: Robin Ward Date: Thu, 7 Apr 2016 15:07:24 -0400 Subject: [PATCH] Try running once off jobs outside of db:migrate --- app/jobs/onceoff.rb | 14 ++++++++++---- app/jobs/scheduled/enqueue_onceoffs.rb | 11 +++++++++++ lib/tasks/db.rake | 2 -- 3 files changed, 21 insertions(+), 6 deletions(-) create mode 100644 app/jobs/scheduled/enqueue_onceoffs.rb diff --git a/app/jobs/onceoff.rb b/app/jobs/onceoff.rb index 79872fc2026..a27304cced6 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 00000000000..9afd19d1199 --- /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 7249afa3770..e6c479365da 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 &&