我有一个rails应用程序,我使用工头来启动我的rails和sidekiq服务器.由于工头与常规的拜占庭不能很好的交互(因为您键入时看不到提示),我已经为rails和sidekiq服务器设置了远程调试.这对于rails服务器来说非常适用,但是当我连接到sidekiq服务器的byebug服务器时,我得到以下内容:
$bundle exec byebug -R localhost:58501 Connecting to byebug server localhost:58501... Connected. (byebug:ctrl)
我无法捕捉任何byebug断点.
根据文档,(byebug:ctrl)提示意味着程序正常终止(https://github.com/deivid-rodriguez/byebug/blob/master/GUIDE.md),但sidekiq正在运行作业.
在我的配置中有什么不正确,还是sidekiq只是不兼容byebug的远程调试?
Procfile:
sidekiq: bundle exec sidekiq rails: rails server
配置/初始化/ 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
请注意,当我不使用远程调试时,byebug功能很好用sidekiq(虽然在工头我看不到我键入的提示).
另请注意,我尝试在Byebug.start_server之前使用Byebug.wait_connection = true,但我有同样的问题.
解决方法
我已经尝试在本地复制,并使用sidekiq 3.3.1和byebug 9.0.5,似乎可以正常工作,对要求进行了微调:
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