Как использовать 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