web-dev-qa-db-fra.com

Ruby on Rails: débogage des tâches de rake

Quand j'écris debugger, il ne commence pas:

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 je lance rake my:task --debugger, il me renvoie immédiatement à la console. Comment est-il possible de déboguer des tâches rake?

40
Andrey Kuznetsov

La réponse d'Andrey Kouznetsov n'a pas fonctionné pour moi avec Ruby 1.9.3. Le joyau de Ruby-debug ne semble pas supporter Ruby 1.9. Je devais utiliser la gem du débogueur: https://github.com/cldwalker/debugger .

  1. Ajoutez gem 'debugger' au groupe de développement de mon Gemfile.
  2. Exécutez bundle.
  3. Ajoutez require 'debugger' en haut de ma tâche de rake.
  4. Ajoutez un appel à debugger où je voulais un point d'arrêt dans ma tâche de rake.
  5. Exécutez la tâche rake normalement à partir de la ligne de commande, par exemple: rake my:task.
26
Liron Yahdav

J'ai trouvé la solution.

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

ou sur certains systèmes

$ rdebug rake my:task
40
Andrey Kuznetsov

Je recommande fortement pry pour cela 

bundle install pry
require 'pry'
rake ...

Dans votre fichier rake task:

binding.pry 
9
Abram

Cette approche n'a pas fonctionné pour moi. Je viens d'ajouter ceci dans mon code:

require 'Ruby-debug'
# ... code ...
debugger
6
Sean McCleary

Code Visual Studio a un très bon débogueur, intégré. Si quelqu'un trouve cela à la recherche d'un moyen de le faire fonctionner avec rake, voici une configuration qui fonctionne:

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

Cela exécuterait la tâche de rake all. Vous devrez peut-être changer le chemin pour ratisser, je n'ai pas trouvé le moyen de le lancer dans PATH.

1
MattW.

ByeBug est un autre pour 2.0+

https://github.com/deivid-rodriguez/byebug

1
Cody Moniz