Module: Capistrano::Configuration::Actions::Inspect

Included in:
Capistrano::Configuration
Defined in:
lib/capistrano/configuration/actions/inspect.rb

Instance Method Summary collapse

Instance Method Details

#capture(command, options = {}) ⇒ Object

Executes the given command on the first server targetted by the current task, collects it's stdout into a string, and returns the string. The command is invoked via #invoke_command.


32
33
34
35
36
37
38
39
40
41
# File 'lib/capistrano/configuration/actions/inspect.rb', line 32

def capture(command, options={})
  output = ""
  invoke_command(command, options.merge(:once => true)) do |ch, stream, data|
    case stream
    when :out then output << data
    when :err then warn "[err :: #{ch[:server]}] #{data}"
    end
  end
  output
end

#stream(command, options = {}) ⇒ Object

Streams the result of the command from all servers that are the target of the current task. All these streams will be joined into a single one, so you can, say, watch 10 log files as though they were one. Do note that this is quite expensive from a bandwidth perspective, so use it with care.

The command is invoked via #invoke_command.

Usage:

desc "Run a tail on multiple log files at the same time"
task :tail_fcgi, :roles => :app do
  stream "tail -f #{shared_path}/log/fastcgi.crash.log"
end

22
23
24
25
26
27
# File 'lib/capistrano/configuration/actions/inspect.rb', line 22

def stream(command, options={})
  invoke_command(command, options) do |ch, stream, out|
    puts out if stream == :out
    warn "[err :: #{ch[:server]}] #{out}" if stream == :err
  end
end