¿Cómo ejecuto una tarea Capistrano localmente?

Definí una tarea de Capistrano personalizada que se supone que debe ejecutarse localmente (en mi máquina de desarrollo):

desc "Push code to Dreamhost" task :push do run "git push dreamhost" end 

sin embargo, cuando trato de ejecutar cap push lo ejecuta en la máquina remota, es decir.

 * executing `push' * executing "git push dreamhost" servers: ["ec2-999-99-999-999.compute-1.amazonaws.com"] 

¿Cómo puedo ejecutarlo localmente?

Sugiero usar:

 system("git push dreamhost") 

o

 output = %x[git push dreamhost] 

¡Eso es simplemente Ruby!

O utiliza run_locally para ejecutar de forma nativa con Capistrano, y aún así get el logging adecuado y todas esas cosas buenas

Para el comentarista que mencionó run_locally no muestra salida, debe volcar la salida a una variable y luego imprimirla para verla. Me gusta esto:

 task :testing_run_locally do output = run_locally "hostname" puts "OUTPUT: " + output end 

La desventaja es que no verá ninguna salida hasta que el command haya terminado. No es un gran problema para los commands que no se ejecutan durante mucho time, pero algo que se ejecuta durante varios minutos hará que la implementación aparezca como si estuviera colgada hasta que termine. Existe una request de extracción abierta para Capistrano que agrega salida de command en time real a run_locally: https://github.com/capistrano/capistrano/pull/285

También puedes usar:

 require 'rake' # Access to sh command [...] desc "Push code to Dreamhost" task :push do sh "git push dreamhost" end