25

I have a background task that runs using delayed_job.

I can see that it does run from the logging statements. It does not seem to have the correct result, compared to running it in the foreground, so I want to debug it in the IRB console.

I am running the background task with

rake jobs:work

and it does not trigger the debugger statement.

How can I load the debugger?

s01ipsist
  • 3,022
  • 2
  • 32
  • 36

2 Answers2

46

Start a standard rails console

ruby script/console

And start a worker inside here, this will see and trigger the debugger statement.

worker = Delayed::Worker.new
worker.start
s01ipsist
  • 3,022
  • 2
  • 32
  • 36
13

I use pry as my console and remote debugger. Pry website here, Pry rails gem here. In your code, you add binding.pry statements to have your app stop executing and open the console. It works the same with delayed_job as it does with your rails app. Make sure you are running delayed_job in the foreground though, so it is still attached to the terminal. E.g., start delayed_job with:

rake jobs:work
Mogsdad
  • 44,709
  • 21
  • 151
  • 275
pduey
  • 3,706
  • 2
  • 23
  • 31
  • 5
    Actually worth noting that if you've added the breakpoint (binding.pry instruction) *after* you've run the queue, then you must first stop & relaunched the queue with rake jobs:work so that the breakpoint is taken into account – Mapad Dec 17 '14 at 14:30