2016-01-05 18 views
14

Tôi có một ứng dụng đường ray trong đó tôi sử dụng foreman để bắt đầu các máy chủ ray và sidekiq của tôi. Vì foreman không tương tác tốt với byebug thông thường (bạn không thể nhìn thấy dấu nhắc khi bạn gõ), tôi đã thiết lập gỡ lỗi từ xa cho cả máy chủ rails và sidekiq của mình. Đây hoạt động hoàn hảo cho máy chủ ray, nhưng khi tôi kết nối đến máy chủ byebug cho máy chủ sidekiq, tôi nhận được như sau:Làm thế nào để sử dụng Byebug với Sidekiq và Foreman

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

Và tôi không thể bắt bất kỳ breakpoint byebug.

Theo tài liệu, dấu nhắc (byebug: ctrl) có nghĩa là chương trình đã kết thúc bình thường (https://github.com/deivid-rodriguez/byebug/blob/master/GUIDE.md), nhưng sidekiq đang chạy công việc tốt.

Có điều gì đó không chính xác trong cấu hình của tôi hay là sidekiq không tương thích với gỡ lỗi từ xa của 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 

Lưu ý rằng khi tôi không sử dụng gỡ lỗi từ xa, byebug chức năng tốt với sidekiq (mặc dù trong foreman tôi không thể nhìn thấy dấu nhắc khi tôi gõ).

Cũng lưu ý rằng tôi đã thử sử dụng Byebug.wait_connection = true trước Byebug.start_server, nhưng tôi có cùng một vấn đề.

+0

Bạn đã bao giờ tìm ra điều này chưa? Tôi đã thực hiện giải pháp của bạn chỉ để gỡ lỗi từ xa bằng cách làm việc trên máy chủ rails với heroku cục bộ, nhưng nó làm chậm máy chủ của tôi xuống một thu thập thông tin và địa phương heroku trở nên khá không phản hồi. Bạn có phải giải quyết vấn đề này không? – Lorenz

+0

Tôi khuyên bạn nên sử dụng thực thi lệnh nội bộ, vì resque hoặc sidekiq là chi phí phát triển lớn. Nhưng đây không thực sự là câu trả lời, chỉ là một gợi ý – Kkulikovskis

+0

Không phải là câu trả lời cho câu hỏi của bạn, nhưng nó sẽ giải quyết vấn đề của bạn: https://github.com/Mon-Ouie/pry-remote – medik

Trả lời

1

Tôi đã cố gắng để tái tạo này tại địa phương, và với sidekiq 3.3.1 và 9.0.5 byebug, nó dường như làm việc tốt với một điều chỉnh nhỏ cho yêu cầu:

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

công việc:

class TestJob 
    include Sidekiq::Worker 

    def perform 
    byebug 
    end 
end 
Các vấn đề liên quan