Cómo capturar la salida de un comando remoto en Capistrano?
-
12-10-2019 - |
Pregunta
Quiero ejecutar un comando remoto (git diff de current_revision y la cabeza en un par de carpetas) y capturar la salida.
He intentado correr. ( "Git diff Rev1 rev2 - carpeta | gato"), pero el método devuelve siempre parece volver a cero (incluso cuando puedo ver la salida del diff en la salida de Capistrano)
Algunas ideas? ¿Puedo utilizar diferentes medios de tubería de la orden, o algo por el estilo? No soy un asistente de Unix, por lo que podría ser algo trivial im que falta aquí.
Solución
Tal vez capture
?
"El ayudante de captura, se ejecutará la orden dada en el primer servidor de juego, y devolverá el resultado del comando como una cadena."
https://github.com/capistrano/ Capistrano / wiki / 2.x-DSL-Acción-inspección-Captura
Otros consejos
Si quiere capturar el resultado de varios hosts, el uso de ejecución 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