如何在IRB控制台中调试在delayed_job任务中运行的代码?

s01*_*ist 25 ruby ruby-on-rails delayed-job

我有一个使用delayed_job运行的后台任务.

我可以看到它确实从日志记录语句中运行.与在前台运行相比,它似乎没有正确的结果,所以我想在IRB控制台中调试它.

我正在运行后台任务

rake jobs:work
Run Code Online (Sandbox Code Playgroud)

并且它不会触发调试器语句.

如何加载调试器?

s01*_*ist 41

启动标准rails控制台

ruby script/console
Run Code Online (Sandbox Code Playgroud)

在这里启动一个worker,这将看到并触发调试器语句.

worker = Delayed::Worker.new
worker.start
Run Code Online (Sandbox Code Playgroud)

  • 延迟:: Worker.new.start (4认同)
  • bundle exec rails runner "Delayed::Worker.new.start" (2认同)

pdu*_*uey 13

我使用pry作为我的控制台和远程调试器.撬网站在这里,Pry rails gem在这里.在您的代码中,添加binding.pry语句以使您的应用程序停止执行并打开控制台.它与delayed_job的工作方式与rails应用程序相同.确保您在前台运行delayed_job,因此它仍然连接到终端.例如,启动delayed_job:

rake jobs:work
Run Code Online (Sandbox Code Playgroud)

  • 实际上值得注意的是,如果你在*运行队列之后添加了断点(binding.pry指令)*,那么你必须首先停止并使用rake作业重新启动队列:工作以便将断点考虑在内 (5认同)