2016-01-05 17 views
14

Foreman'ı raylarıma ve sidekiq sunucularına başladığım bir raylı uygulamasına sahibim. Ustabaşı düzenli byebug ile iyi etkileşime girmediğinden (siz yazarken istemini göremezsiniz), hem raylarım hem de sidekiq sunucuları için uzaktan hata ayıklama işlemi kurdum. Bu raylar sunucu için mükemmel çalışıyor ama sidekiq sunucusu için byebug sunucusuna bağlandığınızda, aşağıdaki alıyorum:Sidekiq ve Foreman ile Byebug nasıl kullanılır

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

Ve hiç byebug kesme noktaları yakalamak veremiyoruz.

Belgelere göre, (byebug: ctrl) komut istemi programın normal olarak sonlandırıldığı anlamına gelir (https://github.com/deivid-rodriguez/byebug/blob/master/GUIDE.md), ancak sidekiq işleri iyi çalışıyor.

Yapılandırmamda yanlış bir şeyler var mı, yoksa sebekiq yalnızca byebug'ın uzaktan hata ayıklaması ile uyumlu değil mi?

Procfile:

sidekiq: bundle exec sidekiq 
rails: rails server 

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

Not ben (her ne kadar sidekiq ince fonksiyonları byebug uzaktan hata ayıklama, kullanmadığınızda ustabaşı olarak yazarken istemini göremiyorum).

Ayrıca, Byebug.start_server'dan önce Byebug.wait_connection = true kullanmayı denedim, ancak aynı sorunu yaşıyorum.

+0

Bunu hiç anladın mı? Çözümünüzü sadece uzaktan kumandalı bir hata ayıklama işlemi gerçekleştirmek için heroku yerel ile raylar sunucusunda çalışıyordum, ama sunucumu yavaşça bir taramayı yavaşlattı ve yerel bir kahramanca çok hoş karşılanmadı. Bu konuyla uğraşmak zorunda mıydınız? – Lorenz

+0

Resque veya sidekiq büyük bir geliştirme yükü olduğundan, yerel olarak inline iş uygulamasını kullanmanızı öneririm. Ama bu gerçekten bir cevap değil, sadece bir öneri – Kkulikovskis

+0

Sorunuza bir cevap değil, ama sorununuzu çözecektir: https://github.com/Mon-Ouie/pry-remote – medik

cevap

1

Ben yerel olarak bu çoğaltmak için denedim ve sidekiq 3.3.1 ile ve 9.0.5 byebug, gerektirecek küçük bir ayarlama ile iyi iş gibi görünüyor:

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

Meslek:

class TestJob 
    include Sidekiq::Worker 

    def perform 
    byebug 
    end 
end 
İlgili konular