如何使用Byebug与Sidekiq和Foreman

时间:2016-01-05 17:05:07

标签: ruby-on-rails sidekiq foreman byebug

我有一个rails应用程序,我使用foreman启动我的rails和sidekiq服务器。由于工头与常规的byebug没有很好的交互(你在键入时看不到提示),我已经为我的rails和sidekiq服务器设置了远程调试。这适用于rails服务器,但是当我连接到sidekiq服务器的byebug服务器时,我得到以下内容:

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

而且我无法捕捉到任何破坏性的断点。

根据文档,(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.wait_connection = true之前使用Byebug.start_server,但我遇到同样的问题。

1 个答案:

答案 0 :(得分:1)

我试图在本地复制这个,并且使用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