Придя из таких языков, как Swift и Objective-C, использование надлежащего отладчика, в котором мне не нужно редактировать код, чтобы записать что-то в журнал или приостановить выполнение, очень важно для быстрого отслеживания проблем. Итак — подумал я — мы используем puma-dev
для запуска нашего Rails приложения во время разработки, это обычная настройка, и поэтому должны быть простые инструкции о том, как прикрепить отладчик Visual Studio Code к запущенному приложению. Но я не смог их найти. Но мне все же удалось скомпоновать ее путем чтения постов на Stack Overflow и экспериментов.
Итак, вот оно.
Настройка переменной окружения порта отладки
Во-первых, нам нужно добавить переменную окружения в место, из которого будет загружаться puma-dev. Я поместил свою в ~/.powconfig
, потому что это первое, что загружается, и оно находится в моей домашней директории.
Отредактируйте ~/.powconfig
, чтобы включить это:
export RUBY_DEBUG_PORT=1234
Обновить Gemfile
Убедитесь, что они находятся в каталоге :development
:
gem "ruby-debug-ide"
gem "debase" # or byebug
Я уверен, что есть способ заставить это работать с новым отладчиком, который поставляется с Ruby 3.1+ (rdbg
), но это будет упражнение для другого раза.
Добавьте инициализатор Rails для запуска rdebug-ide
Создайте файл в /config/initializers/
под названием start_debugger.rb
(или любой другой) и добавьте этот код:
if Rails.env.development? && ENV['RUBY_DEBUG_PORT']
require "ruby-debug-ide"
Debugger.start_server nil, ENV['RUBY_DEBUG_PORT'].to_i
end
Добавьте Launch Target в проект в Visual Studio Code
Добавьте эту конфигурацию в <app root>/.vscode/launch.json
:
{
"configurations": [
{
"name": "Remote Debug",
"type": "Ruby",
"request": "attach",
"remoteHost": "127.0.0.1",
"remotePort": "1234",
"remoteWorkspaceRoot": "${workspaceRoot}",
"cwd": "${workspaceRoot}",
}
]
}
Наконец,
Перезапустите ваше приложение с помощью touch tmp/restart.txt
.
Протестируйте его, запустив «Remote Debug», установив точку останова в одном из ваших контроллеров и обновив страницу, на которой будет запущен код. Если все настроено правильно, ваше приложение должно приостановиться в точке останова.
Поздравляем! 🎉