2013-08-09 7 views
18

Ich habe eine Hintergrundaufgabe, die mit delayed_job ausgeführt wird.Wie kann ich Code debuggen, der in einer verzögerten Job-Aufgabe in der IRB-Konsole ausgeführt wird?

Ich kann sehen, dass es von den Protokollierungsanweisungen ausgeführt wird. Es scheint nicht das richtige Ergebnis zu haben, verglichen mit der Ausführung im Vordergrund, also möchte ich es in der IRB-Konsole debuggen.

Ich bin mit der Hintergrundaufgabe mit

rake jobs:work 

und es nicht der Debugger-Anweisung auslösen.

Wie kann ich den Debugger laden?

Antwort

31

eine Standardschienen starten Konsole

ruby script/console 

Und einen Arbeiter innerhalb hier starten, dies wird die Debugger-Anweisung und auslösen.

worker = Delayed::Worker.new 
worker.start 
+3

Verzögertes :: Worker.new.start – Gaston

+0

Bündel exec Schienen Runner "Verzögerte :: Worker.new.start" –

+0

Diese erstaunliche ist. Die ganze Zeit war ich im Dunkeln auf Konsolenausgabe mit einem verzögerten Job. Vielen Dank! – gregblass

12

Ich benutze PRY als meine Konsole und Remote-Debugger. Pry website here, Pry rails gem here. In Ihrem Code fügen Sie binding.pry-Anweisungen hinzu, damit Ihre App nicht mehr ausgeführt wird und die Konsole geöffnet wird. Es funktioniert genauso mit delayed_job wie mit deiner Rails App. Stellen Sie sicher, dass Sie delayed_job im Vordergrund ausführen, so dass es immer noch mit dem Terminal verbunden ist. Z. B. starten delayed_job mit:

rake jobs:work 
+5

Es ist wirklich erwähnenswert, dass wenn Sie den Haltepunkt (binding.pry Anweisung) * nach * hinzugefügt haben Sie die Warteschlange ausgeführt haben, dann müssen Sie die Warteschlange mit Rake-Jobs stoppen und neu starten: arbeiten, so dass der Haltepunkt berücksichtigt wird – Mapad