Как захватить вывод из удаленной команды в Capistrano? - PullRequest
24 голосов
/ 18 января 2011

Я хочу запустить удаленную команду (git diff of current_revision и HEAD в нескольких папках) и записать вывод.

Я попытался запустить ("git diff rev1 rev2 - folder | cat"), но метод всегда возвращает, кажется, возвращает ноль (даже когда я вижу вывод diff в выводе Capistrano).

Есть идеи? Могу ли я использовать другие способы передачи команды или что-то подобное? Я не волшебник Unix, так что это может быть что-то тривиальное, что мне здесь не хватает.

Ответы [ 2 ]

39 голосов
/ 18 января 2011

Может быть capture?

"Помощник захвата выполнит данную команду на первом соответствующем сервере и вернет вывод команды в виде строки."

https://github.com/capistrano/capistrano/wiki/2.x-DSL-Action-Inspection-Capture

5 голосов
/ 17 июля 2013

Если вы хотите захватить выходные данные нескольких хостов, используйте команду run с блоком: например ::

 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...