amitree / delayed_job_recurring

Extends delayed_job to support recurring jobs
MIT License
84 stars 33 forks source link

Endless loop on perform #20

Closed CodeMonkeySteve closed 6 years ago

CodeMonkeySteve commented 6 years ago

I'm trying to create a basic recurring job:

# app/interactors/report_scheduler.rb
class ReportScheduler
  include Delayed::RecurringJob
  run_every 1.hour
  def perform
    puts "ReportScheduler"
  end
end

But when DelayedJob runs it, it falls into and endless loop, eventually failing with SystemStackError:

[Worker(delayed_job host:ork pid:15721)] Job ReportScheduler (id=68) RUNNING
ReportScheduler
(0.2ms)  BEGIN
Delayed::Backend::ActiveRecord::Job Load (0.4ms)  SELECT "delayed_jobs".* FROM "delayed_jobs" WHERE (((handler LIKE '--- !ruby/object:ReportScheduler %') OR (handler LIKE '--- !ruby/object:ReportScheduler
%')))
SQL (0.2ms)  DELETE FROM "delayed_jobs" WHERE "delayed_jobs"."id" = $1  [["id", 68]]
ReportScheduler
Delayed::Backend::ActiveRecord::Job Load (0.3ms)  SELECT "delayed_jobs".* FROM "delayed_jobs" WHERE (((handler LIKE '--- !ruby/object:ReportScheduler %') OR (handler LIKE '--- !ruby/object:ReportScheduler
%')))
ReportScheduler
Delayed::Backend::ActiveRecord::Job Load (0.3ms)  SELECT "delayed_jobs".* FROM "delayed_jobs" WHERE (((handler LIKE '--- !ruby/object:ReportScheduler %') OR (handler LIKE '--- !ruby/object:ReportScheduler
%')))
ReportScheduler
...
(8.6ms)  ROLLBACK
[Worker(delayed_job host:ork pid:15721)] Job ReportScheduler (id=68) FAILED (0 prior attempts) with SystemStackError: stack level too deep

Do I need to do something special in #perform to keep this from happening, or what?

(Versions: delayed_job 4.1.3, delayed_job_recurring 0.3.7, ruby 2.4.2)

afn commented 6 years ago

Sorry for the delay in getting back to you. Are you still having issues with this?

CodeMonkeySteve commented 6 years ago

No worries, I wound up implementing my own solution. I just needed something to poll every hour, and that's easily done by just scheduling another job at the desired time.