2011-01-18 14 views
24

Quiero ejecutar un comando remoto (git diff de current_revision y HEAD en algunas carpetas) y capturar el resultado.¿Cómo capturar la salida desde un comando remoto en Capistrano?

He intentado ejecutar ("git diff rev1 rev2 - folder | cat"), pero el método siempre devuelve parece devolver nil (incluso cuando puedo ver la salida diff en la salida de Capistrano).

¿Alguna idea? ¿Puedo usar diferentes medios para conectar el comando, o algo así? No soy un asistente de Unix, por lo que podría ser algo trivial que me falta aquí.

Respuesta

5

Si desea capturar la salida de varios hosts, utilizar Ejecutar con un bloque: por ejemplo:

desc "capture output from multiple servers" 
    task :capture_multiple_servers, :roles => [:some_servers] do 
    results = {} 
    run "hostname --fqdn" do |channel, stream, data| 
     if stream == :out 
     results[channel[:host]] = [] unless results.key?(channel[:host]) 
     results[channel[:host]] << data if stream == :out 
     end 
    end 
    puts "Your results were:" 
    results.keys.sort.each do | host | 
     puts "#{host}:#{results[host].join}" 
    end 
    end 
Cuestiones relacionadas