2010-04-18 9 views
37

Cuando escribo debugger no se inicia:Ruby on Rails: Depuración de tareas rastrillo

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 

Si me quedo rake my:task --debugger, me devuelve a la consola de inmediato. ¿Cómo es posible depurar tareas de rake?

Respuesta

25

La respuesta de Andrey Kouznetsov no funcionó para mí usando Ruby 1.9.3. La gema ruby-debug no parece ser compatible con Ruby 1.9. Tuve que usar la gema depuradora: https://github.com/cldwalker/debugger.

  1. Agregue gem 'debugger' al grupo de desarrollo de mi Gemfile.
  2. Ejecute bundle.
  3. Agregue require 'debugger' a la cima de mi tarea de rake.
  4. Agregue una llamada al debugger donde quería un punto de interrupción en mi tarea de rake.
  5. Ejecute la tarea de rake normalmente desde la línea de comando, por ejemplo: rake my:task.
+0

Gracias por responder –

+2

Otra opción en lugar de poner 'require 'depurador'' en la parte superior es poner en línea' require' depurador '; depurador'. De esta forma, cuando borre las instrucciones 'debugger', no olvidará eliminar' require'. – wisbucky

38

Encontré la solución.

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

o en algunos sistemas

$ rdebug rake my:task 
+2

Realmente no deberías estar haciendo una gran cantidad de lógica en una tarea de rake. La mayoría de mis tareas de rake son de una línea que llaman a un método en un modelo que luego está completamente cubierto con pruebas. –

+0

Estoy haciendo spider basado en mecanize y necesito depurar algunas líneas. Todos ellos en métodos y aún no cubiertos por las pruebas. Gracias por la respuesta. –

+0

@rspeicher, es útil si tiene una tarea inicial –

6

Este enfoque no funcionó para mí. Acabo de agregar esto en mi código:

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

¡Thx! ¡Salvó mi día! –

8

recomiendo altamente pry para este

bundle install pry 
require 'pry' 
rake ... 

En su tarea rastrillo archivo:

binding.pry 
0

Visual Studio Code tiene depurador bastante bueno, incorporado. Si alguien considera que esta búsqueda de una manera de conseguir que funcione con el rastrillo, he aquí una configuración de trabajo:

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

Esto iría en la tarea rake all. Puede que tengas que cambiar la ruta del rastrillo, no encontré la manera de ejecutar la ruta en PATH.