2016-01-05 15 views
14

Mam aplikację szyn, w której korzystam z brygadzisty, aby uruchomić moje szyny i serwery sidekiq. Ponieważ brygadzista nie współdziała dobrze ze zwykłym byebugiem (nie widzisz podpowiedzi podczas pisania), skonfigurowałem zdalne debugowanie dla moich szyn i serwerów sidekiq. Działa to doskonale na serwerze szynach, ale kiedy połączyć się z serwerem byebug dla serwera sidekiq, mam następujące:Jak korzystać z Byebug z Sidekiq i Foreman

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

I jestem w stanie wychwycić wszystkie punkty przerwania byebug.

Zgodnie z dokumentacją, znak zachęty (byebug: ctrl) oznacza, że ​​program zakończył się normalnie (https://github.com/deivid-rodriguez/byebug/blob/master/GUIDE.md), ale sidekiq działa poprawnie.

Czy w mojej konfiguracji jest coś niepoprawnego, czy też sidekiq nie jest kompatybilny ze zdalnym debugowaniem byebug?

Procfile:

sidekiq: bundle exec sidekiq 
rails: rails server 

config/inicjalizatory/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 

Zauważ, że gdy nie używam zdalnego debugowania, byebug funkcji drobnych z sidekiq (choć w brygadziście nie widzę podpowiedzi podczas pisania).

Należy również pamiętać, że próbowałem używać Byebug.wait_connection = true przed Byebug.start_server, ale mam ten sam problem.

+0

Czy kiedykolwiek to rozgryzłeś? Zaimplementowałem twoje rozwiązanie tylko po to, aby uzyskać zdalne debugowanie byebug działające na serwerze railsowym z heroku local, ale spowolniło mój serwer do crawlowania, a lokalna heroku przestała reagować. Czy w ogóle masz do czynienia z tym problemem? – Lorenz

+0

Proponuję lokalnie używać wbudowanego wykonywania zadań, ponieważ resque lub sidekiq są dużym nakładem pracy nad rozwojem. Ale to nie jest odpowiedź, tylko propozycja – Kkulikovskis

+0

Nie jest to odpowiedź na twoje pytanie, ale rozwiąże ona twój problem: https://github.com/Mon-Ouie/pry-remote – medik

Odpowiedz

1

Próbowałem powtórzyć to lokalnie iz sidekiq 3.3.1 i byebug 9.0.5, wydaje się działać prawidłowo z niewielką korektę wymagać:

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}" 

praca:

class TestJob 
    include Sidekiq::Worker 

    def perform 
    byebug 
    end 
end