Как использовать Byebug с Sidekiq и Foreman

У меня есть приложение rails, в котором я использую foreman для запуска своих рельсов и серверов sidekiq. Поскольку мастер не взаимодействует хорошо с обычным byebug (вы не можете видеть приглашение по мере ввода), я настроил удаленную отладку как для моих рельсов, так и для серверов sidekiq. Это отлично работает для сервера rails, но когда я подключаюсь к серверу byebug для сервера sidekiq, я получаю следующее:

$ 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

Обратите внимание, что когда я не использую удаленную отладку, функции beebug отлично работают с sidekiq (хотя в команде мастера я не вижу приглашения при вводе).

Также обратите внимание, что я пытался использовать Byebug.wait_connection = true до Byebug.start_server, но у меня такая же проблема.

Ответы

Ответ 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