lunes, 10 de marzo de 2014

Depurar Rails usando Vim

Llevo ya algún tiempo intentando depurar en Vim las aplicaciones Rails en las que trabajo. Esto debería de ser sencillo utilizando la gema debugger-xml y el plugin para vim vim-ruby-debugger, pero me encontrado una serie de problemas más debidos a los distintos entornos de desarrollo que a temas técnicos.

En ASPgems utilizamos en los proyector Rails bundler, así todos los desarrolladores y en todos los entornos utilizamos las mismas versiones de las distintas gemas.
Por otro lado, hay bastante libertad en los IDEs a utilizar entre los distintos miembros de los equipos, por lo que cada uno utiliza el que más le gusta, así unos RubyMine, otros Vim,  SublimeText, etc ... Y es aquí donde aparecen los problemas, a RubyMine historícamente no le ha gustado mucho las gemas para depuración que no utiliza él. Parece ser que en la versión 6 de RubyMine estos problemas se han solucionado si utilizas debugger-xml versión 0.3.3, para versiones anteriores de RubyMine( y creo que sólo a partir de la 4.3) hay que utilizar algún truquillo como comentan en stackoverlow.

De todas formas voy a pasar a detallar como instalar todo lo necesario para depurar aplicaciones Rails con Vim:

  1. Instalar en Vim el plugin vim-ruby-debugger.
    Yo uso Vundle para gestionar los plugins en Vim por lo que sólo hay que añadir esta línea a .vimrc.

    Bundle 'astashov/vim-ruby-debugger'
    y posteriormente ejecutar
    :BundleInstall
    Con esto ya tenemos instalado el plugin en vim.

  2. Añadir al Gemfile la gema de depuración, aquí es donde hay que tener en cuenta que no se cargue cuando se use RubyMine. Para ello añadimos la siguiente línea.
    gem 'debugger-xml', {group: [:test, :development]}.merge(ENV['RM_INFO'] ? {require: false} : {})
    posteriormente ejecutar en la linea de comandos 
    # bundle install
Ahora ya tenemos todo lo necesario para poder depurar aplicaciones Rails con Vim.


Para arrancar el depurador dentro de Vim utilizamos
:Rdebugger
si por otro lado queremos depurar por ejemplo una tarea rake pues ejecutamos
:Rdebugger 'rake nombre_de_la_tarea'

Los comandos más comunes son estos:

 <leader>b - Añade/elimina un punto de ruptura.
 <leader>d - Borra todos los puntos de ruptura.
 <leader>v - Abre/Cierra la ventana de variables.
 <leader>n - Paso a paso sin entrar en la función.
 <leader>s - Paso a paso entrando en la función.
 <leader>c - continuar ejecucion.