Как использовать Byebug с удаленным процессом (например, pow)

Как подключиться к удаленному отладочному экземпляру Byebug (для использования с Pow и т. д.)?


person Joseph Siefers    schedule 01.04.2014    source источник


Ответы (3)


В вашем коде

remote_byebug

Вызовите свой код (например, обновив страницу). Это запустит локальный сервер byebug на порту 8989. Затем ваш код «зависнет» в ожидании подключения клиента.

Подключаемся к нему через терминал:

byebug -R localhost:8989

Настройка сервера вручную больше не требуется с https://github.com/deivid-rodriguez/byebug/pull/406/files

person DylanReile    schedule 27.04.2021

Ответ Джозефа был хорошим, но в некоторых мелочах сбивающим с толку. Он помещает запуск byebug-сервера в config/environments/development.rb, когда лучше было бы в инициализаторе. Кроме того, экспорт переменной среды выполняется в .powenv или .powrc. Вот как я заставил его работать.

В вашем гемфайле:

gem 'byebug'

В командной строке:

bundle install

Если вы используете Pow, добавьте в .powenv следующее:

export BYEBUGPORT=3001

Если вы используете другие фреймворки (например, только foreman), вам, возможно, придется изменить .env.

In config/initializers/byebug.rb

if Rails.env.development? and ENV['BYEBUGPORT']
  require 'byebug/core'
  Byebug.start_server 'localhost', ENV['BYEBUGPORT'].to_i
end

И, наконец, в командной строке:

touch tmp/restart.txt

Как только вы перейдете на свой сайт pow, сервер byebug должен быть запущен. Теперь в командной строке вы можете:

[bundle exec] byebug -R localhost:3001
person Nick Gronow    schedule 13.09.2014
comment
Да, следовал инструкции и все работает. Спасибо Николай! - person Patrick Reiner; 01.03.2015
comment
Обратите внимание, что touch tmp/restart.txt может не понадобиться, в зависимости от сервера приложений. Требуется для Passenger в производстве, обычно не требуется при разработке на каком-либо сервере приложений. - person Noah Gibbs; 14.04.2015
comment
Хорошо работает, также с puma-dev. Используйте ~/.powconfig вместо .powenv для глобальной конфигурации. - person Manuel Meurer; 13.06.2017

Чтобы выполнить описанное выше, мне пришлось собрать воедино информацию из нескольких разных источников, поэтому я решил включить сюда сводное руководство для удобства:

Вот шаги:

  1. В config/environments/development.rb добавляем:

    require 'byebug'
    
    #set in your .powconfig
    if ENV['RUBY_DEBUG_PORT']
      Byebug.start_server 'localhost', ENV['RUBY_DEBUG_PORT'].to_i
    else
      Byebug.start_server 'localhost'
    end
    
  2. Перезапустите Pow и посетите yourapp.dev.

  3. Запустите следующее:

    [bundle exec] byebug -R localhost:<port_you_defined_in_pow_config>
    

Вы должны увидеть успешное подключение к удаленному экземпляру.

person Joseph Siefers    schedule 01.04.2014
comment
Спасибо тебе за это. Я могу подключиться к серверу, но мои точки останова не ломаются. Любые идеи? С чего начать? Спасибо! - person Andy Adams; 06.06.2014
comment
Вы используете пау? Если это так, попробуйте первый ответ в stackoverflow.com/questions/8996498/ - person Joseph Siefers; 06.06.2014
comment
Я использую пау. Я попробовал ответить, не повезло. Я сижу за терминалом с Connecting to byebug server localhost:12346. Connected. и множеством вызовов byebug в своем коде, но ничего не сломалось! Я в растерянности на данный момент - если у вас есть другие идеи, я все слушаю! В противном случае, спасибо вам в любом случае за вашу помощь! - person Andy Adams; 06.06.2014
comment
Примечание: не используйте вопрос, упомянутый Джозефом, для Ruby 2.0 или выше! - person Noah Gibbs; 14.04.2015
comment
@ Ноа, не могли бы вы уточнить? - person Joseph Siefers; 17.04.2015
comment
@ДжозефСиферс уверен. Ruby-debug (оригинал) только 1.8 и ниже. Rdebug19 пока только через 1.9, 2.0+ нет. Вы должны использовать byebug вместо rdebug или rdebug19 для Ruby 2.0 или выше. Отладчики — довольно привередливые расширения, они имеют тенденцию ломаться, когда Ruby меняет внутренности. - person Noah Gibbs; 19.04.2015
comment
@ Ноа, я понимаю, к чему ты клонишь, спасибо за разъяснение. Хотя этот вопрос относится к rdebug, он по-прежнему актуален и относится к byebug также в Ruby 2.0. Первый ответ ясно объясняет, что pow имеет несколько рабочих потоков и возможно, что удаленный отладчик (в данном случае byebug) подключится не к тому потоку (что приведет к пропущенным точкам останова). - person Joseph Siefers; 20.04.2015
comment
Обратите внимание, что вам нужно добавить require 'byebug/core' в данный момент — см. deivid-rodriguez/byebug/issues/ - person Whatcould; 08.12.2015