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!