2016-01-05 5 views
14

के साथ बायबग का उपयोग कैसे करें मेरे पास एक रेल एप्लिकेशन है जिसमें मैं अपने रेल और साइडकीक सर्वर शुरू करने के लिए फोरमैन का उपयोग करता हूं। चूंकि फोरमैन नियमित बायबग के साथ अच्छी तरह से बातचीत नहीं करता है (आप टाइप करते समय प्रॉम्प्ट नहीं देख सकते हैं), मैंने अपने रेल और साइडकीक सर्वर दोनों के लिए रिमोट डीबगिंग सेट की है। यह रेल सर्वर के लिए पूरी तरह से काम करता है, लेकिन जब मैं sidekiq सर्वर के लिए byebug सर्वर से कनेक्ट, मैं निम्नलिखित मिल:साइडकीक और फोरमैन

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

और मैं किसी भी byebug breakpoints को पकड़ने में असमर्थ हूँ।

प्रलेखन के अनुसार, (byebug: ctrl) प्रॉम्प्ट का अर्थ है कि प्रोग्राम सामान्य रूप से समाप्त हो गया है (https://github.com/deivid-rodriguez/byebug/blob/master/GUIDE.md), लेकिन साइडकीक नौकरियां ठीक चल रहा है।

क्या मेरे कॉन्फ़िगरेशन में कुछ गड़बड़ है, या साइडकीक बसबग के रिमोट डीबगिंग के साथ संगत नहीं है?

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 

ध्यान दें कि जब मैं दूरस्थ डीबगिंग, sidekiq के साथ ठीक काम करता है byebug का उपयोग नहीं करते हैं (हालांकि फोरमैन में मैं प्रॉम्प्ट नहीं देख सकता जैसा कि मैं टाइप करता हूं)।

यह भी ध्यान दें कि मैंने Byebug.start_server से पहले उपयोग करने का प्रयास किया है, लेकिन मेरे पास एक ही समस्या है।

+0

क्या आपने कभी यह पता लगाया है? मैंने आपके समाधान को केवल हेबोकू स्थानीय के साथ रेल सर्वर पर काम कर रहे बेबग रिमोट डीबगिंग प्राप्त करने के लिए लागू किया, लेकिन यह मेरे सर्वर को क्रॉल पर धीमा कर दिया और उसकेोकू लोकल बहुत अधिक उत्तरदायी बन गए। क्या आपको इस मुद्दे से बिल्कुल निपटना पड़ा? – Lorenz

+0

मैं स्थानीय रूप से इनलाइन जॉब निष्पादन का उपयोग करने का सुझाव दूंगा, क्योंकि रेस्क्यू या साइडकीक बड़े विकास ओवरहेड हैं। लेकिन यह वास्तव में एक जवाब नहीं है, सिर्फ एक सुझाव – Kkulikovskis

+0

आपके प्रश्न का उत्तर नहीं है, लेकिन यह आपकी समस्या का समाधान करेगा: https://github.com/Mon-Ouie/pry-remote – medik

उत्तर

1

मैं इस स्थानीय स्तर पर दोहराने की कोशिश की है, और sidekiq 3.3.1 के साथ और 9.0.5 byebug, यह आवश्यकता के लिए एक छोटी सी समायोजन के साथ ठीक से काम करने लगता है:

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

नौकरी:

class TestJob 
    include Sidekiq::Worker 

    def perform 
    byebug 
    end 
end 
संबंधित मुद्दे