Пульт ByeBug не будет сталкиваться с точками останова с Unicorn

Запускаю юникорна через мастера, поэтому приглашение отладчика проглатывается. Мне повезло с жемчужиной debugger в прошлом ">подключение в качестве удаленного отладчика.

Мы собираемся перейти на Ruby 2.1.2, который, насколько я понимаю, несовместим с debugger.

Я изменил код удаленного отладчика, чтобы использовать byebug:

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 "Remote debugger on port #{port}"
Byebug.start_server('localhost', port)

Как только unicorn запущен, я могу подключиться к byebug:

$ byebug -R localhost:54623
Connecting to byebug server localhost:54623
Connected.

Но мой код завален вызовами byebug, и они никогда не вызывают точку останова в удаленном отладчике. Страницы, которые блокируются при загрузке, когда отладчик не работает удаленно, загружаются нормально при удаленном подключении.

В файле единорога указан только один рабочий процесс, поэтому я уверен, что это не так:

require File.dirname(__FILE__)+'/application'

if Rails.env.development?
  worker_processes 1
  timeout_override = ENV['WEBSERVER_TIMEOUT_OVERRIDE']
  timeout Integer(timeout_override || 3600)
  if timeout_override
    puts "Development: Using WEBSERVER_TIMEOUT_OVERRIDE of #{timeout_override} seconds"
  end
else
  worker_processes Integer(ENV['WEB_CONCURRENCY'] || 3)
  timeout 25
end

preload_app true

before_fork do |server, worker|

  Signal.trap 'TERM' do
    puts 'Unicorn master intercepting TERM and sending myself QUIT instead'
    Process.kill 'QUIT', Process.pid
  end

  defined?(ActiveRecord::Base) and
      ActiveRecord::Base.connection.disconnect!
end

after_fork do |server, worker|

  Signal.trap 'TERM' do
    puts 'Unicorn worker intercepting TERM and doing nothing. Wait for master to send QUIT'
  end

  defined?(ActiveRecord::Base) and
      ActiveRecord::Base.establish_connection
end

Любые идеи очень приветствуются.


person Tim W    schedule 27.06.2014    source источник


Ответы (1)


Я думаю, вы пропустили одну простую настройку: Byebug.wait_connection = true

Изменить это

port = find_available_port
puts "Remote debugger on port #{port}"
Byebug.start_server('localhost', port)

к этому

port = find_available_port
puts "Remote debugger on port #{port}"
Byebug.wait_connection = true
Byebug.start_server('localhost', port)

Это должно сделать волшебство. Надеюсь, поможет.

person Hiasinho    schedule 21.12.2014