Ruby on Rails: отладка задач грабли
Когда я пишу debugger
, он не запускается:
NoMethodError: undefined method `run_init_script' for Debugger:Module
from /usr/local/lib/ruby/gems/1.8/gems/ruby-debug-base-0.10.3/lib/ruby-debug-base.rb:239:in `debugger'
from (irb):4
Если я запустил rake my:task --debugger
, он немедленно вернет мне консоль. Как можно отлаживать задачи рейка?
Ответы
Ответ 1
Ответ Андрея Кузнецова не работал у меня с использованием Ruby 1.9.3. Кажется, что рубиновый отладочный камень не поддерживает Ruby 1.9. Мне пришлось использовать камень отладчика: https://github.com/cldwalker/debugger.
- Добавьте
gem 'debugger'
в мою группу разработки Gemfile.
- Выполнить
bundle
.
- Добавьте
require 'debugger'
в начало моей задачи rake.
- Добавьте вызов
debugger
, где мне нужна точка останова в моей команде rake.
- Запустите задачу рейка, как правило, из командной строки, например:
rake my:task
.
Ответ 2
Я нашел решение.
$ gem install ruby-debug
$ ruby-debug rake my:task
или на некоторых системах
$ rdebug rake my:task
Ответ 3
Я настоятельно рекомендую pry для этого
bundle install pry
require 'pry'
rake ...
В файле rake task:
binding.pry
Ответ 4
Этот подход не работал у меня. Я просто добавил это в свой код:
require 'ruby-debug'
# ... code ...
debugger
Ответ 5
ByeBug - еще один для 2.0 +
https://github.com/deivid-rodriguez/byebug
Ответ 6
Код Visual Studio имеет довольно хороший отладчик, встроенный. Если кто-нибудь найдет, что ищет способ заставить его работать с граблями, вот рабочая конфигурация:
{
"name": "Debug a rake task",
"type": "Ruby",
"request": "launch",
"useBundler": true,
"cwd": "${workspaceRoot}",
"program": "/usr/local/bin/rake",
"args": ["all"]
}
Это приведет к выполнению задачи rake all
. Возможно, вам придется изменить путь к грабли, я не нашел способ запустить его в PATH.