New Capistrano Goodies
Jamis released Capistrano 1.1.9 (beta) today. You'll want to pay attention to the minimal set of significant changes, but you also don't want to miss some of the convenient new "minor" features, as well.
For example, you can now issue arbitrary remote commands from the command line:
COMMAND=uptime cap invoke
Or, if you prefer a bit less on the verbosity scale, use:
COMMAND=uptime cap -v invoke
Either one runs the 'uptime' command on all machines in all roles, by
default. You can narrow it to specific roles using the
ROLES environment variable. For example:
COMMAND=uptime ROLES=app,web cap invoke
Or you can call out specific machines using the HOSTS
environment variable, and bypass the need for a
recipe file altogether. For example:
COMMAND=uptime HOSTS=abc.com,xyz.com cap invoke
Very convenient, and just another example of how Capistrano is clearly born out of Jamis' day-to-day needs.
Before I go back to deploying apps, here's one more handy new feature. In the "old days" (about a week ago), if you wanted to stream consolidated logs down to your local console, you had to muck around with channels and streams, like so:
task :tail_log, :roles => :app do
run "tail -f #{shared_path}/log/production.log" do |ch, stream, out|
puts out if stream == :out
if stream == :err
puts "[err : #{ch[:host]}] #{out}"
break
end
end
end
While channels and streams can still be useful, you can now create cross-server streams using:
task :tail_log, :roles => :app do
stream "tail -f #{shared_path}/log/production.log"
end
More goodies await you in the CHANGELOG.
Enjoy!