ruby-on-rails – 如何使用Byebug与Sidekiq和工头

前端之家收集整理的这篇文章主要介绍了ruby-on-rails – 如何使用Byebug与Sidekiq和工头前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个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

猜你在找的Ruby相关文章