2013-08-09 7 views
18

Mam zadanie w tle uruchamiane za pomocą delayed_job.Jak mogę debugować kod działający w zadaniu delayed_job w konsoli IRB?

Widzę, że jest uruchamiany z instrukcji logowania. Wydaje się, że nie ma poprawnego wyniku, w porównaniu do uruchamiania go na pierwszym planie, dlatego chcę go debugować w konsoli IRB.

Używam zadanie tła z

rake jobs:work 

i nie pociąga za sobą stwierdzenie debuggera.

Jak mogę załadować debugger?

Odpowiedz

31

Zacznij standardowej szyny konsoli

ruby script/console 

i rozpocząć pracownika wewnątrz tutaj, będzie to zobaczyć i wywołać oświadczenie debuggera.

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

Opóźniony :: Worker.new.start – Gaston

+0

szyny bundle exec runner "Opóźniony :: Worker.new.start" –

+0

To jest niesamowite. Przez cały ten czas byłam w ciemności na wyjściu konsoli przy użyciu opóźnionego zadania. Dziękuję Ci! – gregblass

12

Używam pry jako mojej konsoli i zdalnego debuggera. Pry website here, Pry rails gem here. W kodzie dodajemy instrukcje binding.pry, aby aplikacja przestała działać i otworzyła konsolę. Działa to tak samo z delayed_job, jak z twoją aplikacją rails. Upewnij się jednak, że uruchamiasz delayed_job na pierwszym planie, więc nadal jest on podłączony do terminala. Na przykład zacząć delayed_job z:

rake jobs:work 
+5

Właściwie warto zauważyć, że jeśli dodałeś punkt przerwania (instrukcja binding.pry) * po * uruchomiłeś kolejkę, musisz najpierw zatrzymać i ponownie uruchomić kolejkę z zadaniami rake: pracuj tak, aby punkt przerwania był brany pod uwagę – Mapad