2016-01-05 10 views
14

Ho un'applicazione per rotaie in cui utilizzo il caposquadra per avviare i miei binari e i server sidekiq. Poiché il caporeparto non interagisce bene con il toebug regolare (non è possibile visualizzare il prompt durante la digitazione), ho impostato il debug remoto per entrambi i miei binari e server sidekiq. Questo funziona perfettamente per il server di rotaie, ma quando mi collego al server byebug per il server sidekiq, ottengo il seguente:Come usare Byebug con Sidekiq e Foreman

$ bundle exec byebug -R localhost:58501 
Connecting to byebug server localhost:58501... 
Connected. 
(byebug:ctrl) 

E sono in grado di catturare qualsiasi breakpoint byebug.

Secondo la documentazione, il prompt (byebug: ctrl) significa che il programma è terminato normalmente (https://github.com/deivid-rodriguez/byebug/blob/master/GUIDE.md), ma sidekiq sta eseguendo i lavori bene.

C'è qualcosa di sbagliato nella mia configurazione, oppure sidekiq non è compatibile con il debug remoto di byebug?

Procfile:

sidekiq: bundle exec sidekiq 
rails: rails server 

config/initializers/byebug.rb:

if Rails.env.development? 
    require 'byebug' 

    def find_available_port 
    server = TCPServer.new(nil, 0) 
    server.addr[1] 
    ensure 
    server.close if server 
    end 

    port = find_available_port 

    puts "Starting remote debugger..." 
    Byebug.start_server 'localhost', port 
    puts "Remote debugger on port #{port}" 
end 

noti che quando non uso debug remoto, byebug funzioni bene con sidekiq (sebbene in foreman non riesco a vedere il prompt mentre scrivo).

Si noti inoltre che ho provato a utilizzare Byebug.wait_connection = true prima dello Byebug.start_server, ma ho lo stesso problema.

+0

Lo hai mai capito? Ho implementato la soluzione solo per ottenere il debug remoto di byebug lavorando sul server di rotaie con heroku local, ma ha rallentato il mio server fino a una scansione e heroku local è diventato praticamente insensibile. Hai avuto a che fare con questo problema? – Lorenz

+0

Suggerirei di utilizzare l'esecuzione del lavoro inline localmente, poiché resque o sidekiq sono grandi overhead di sviluppo. Ma questa non è davvero una risposta, solo un suggerimento – Kkulikovskis

+0

Non è una risposta alla tua domanda, ma risolverà il tuo problema: https://github.com/Mon-Ouie/pry-remote – medik

risposta

1

Ho cercato di replicare questo a livello locale, e con sidekiq 3.3.1 e 9.0.5 byebug, sembra funzionare bene con una regolazione minore alla richiedere:

require 'byebug/core' 

def find_available_port 
    server = TCPServer.new(nil, 0) 
    server.addr[1] 
ensure 
    server.close if server 
end 

port = find_available_port 

puts "Starting remote debugger..." 
Byebug.start_server 'localhost', port 
puts "Remote debugger on port #{port}" 

lavoro:

class TestJob 
    include Sidekiq::Worker 

    def perform 
    byebug 
    end 
end 
Problemi correlati