Comment capturer la sortie d'une commande à distance à Capistrano?
-
12-10-2019 - |
Question
Je veux exécuter une commande à distance (git diff de current_revision et la tête dans quelques dossiers) et de capturer la sortie.
J'ai essayé terme. ( « Git diff rev1 rev2 - dossier | cat »), mais la méthode revient toujours semble revenir nul (même quand je peux voir la sortie de diff dans la sortie Capistrano)
Toutes les idées? Puis-je utiliser différents moyens de tuyauterie la commande, ou quelque chose comme ça? Je ne suis pas un sorcier Unix, il pourrait être quelque chose de trivial Im manque ici.
La solution
Peut-être capture
?
« L'assistant de capture exécutera la commande donnée sur le premier serveur correspondant, et renvoie la sortie de la commande comme une chaîne. »
https://github.com/capistrano/ Capistrano / wiki / 2.x-DSL-action-inspection-capture
Autres conseils
Si vous voulez capturer la sortie de plusieurs hôtes, exécutez l'utilisation avec un bloc: par exemple:.
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