2010-04-18 4 views
37

Когда я пишу debugger не запускается:Ruby On Rails: отладки грабли задачи

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, он возвращает меня немедленно консоль. Как можно отлаживать задачи рейка?

ответ

25

Ответ Андрея Кузнецова не работал для меня с использованием Ruby 1.9.3. Кажется, что рубиновый отладочный камень не поддерживает Ruby 1.9. Мне пришлось использовать драгоценный камень отладчика: https://github.com/cldwalker/debugger.

  1. Добавить gem 'debugger' в группу разработки Gemfile.
  2. Пробег bundle.
  3. Добавить require 'debugger' в начало моей рейк-задачи.
  4. Добавьте звонок в debugger, где мне нужна точка останова в моей задаче грабли.
  5. Запуск задачи рейка, как правило, из командной строки, например: rake my:task.
+0

Спасибо за свежий ответ –

+2

Другой вариант вместо того, чтобы положить 'require 'debugger'' наверху, - это установить встроенный' require' debugger '; debugger'. Таким образом, когда вы удаляете операторы 'debugger', вы не забудете удалить' require'. – wisbucky

38

Я нашел решение.

$ gem install ruby-debug 
$ ruby-debug rake my:task 

или на некоторых системах

$ rdebug rake my:task 
+2

Действительно, хотя вы не должны делать большое количество логики в задаче грабли. Большинство моих рейк-задач - это однострочные, которые вызывают метод на модели, которая затем полностью покрывается тестами. –

+0

Я занимаюсь пауком на основе механизации, и мне нужно отлаживать некоторые строки. Все они в методах и еще не охвачены испытаниями. Благодарим вас за ответ. –

+0

@ rspeicher, полезно, если у вас есть задание на семя –

6

Этот подход не работает для меня. Я просто добавил это в свой код:

require 'ruby-debug' 
# ... code ... 
debugger 
+0

Thx! Спас мой день! –

8

Я настоятельно рекомендую pry для этого

bundle install pry 
require 'pry' 
rake ... 

В вашей граблей задачи файл:

binding.pry 
0

Visual Studio Code имеет довольно хороший отладчик, встроенный. Если кто-то считает, что это ищет способ, чтобы заставить его работать с граблями, вот рабочая конфигурация:

{ 
    "name": "Debug a rake task", 
    "type": "Ruby", 
    "request": "launch", 
    "useBundler": true, 
    "cwd": "${workspaceRoot}", 
    "program": "/usr/local/bin/rake", 
    "args": ["all"] 
} 

Это запустить грабли задачу all. Возможно, вам придется изменить путь к грабли, я не нашел способ запустить его в PATH.