Task Dependencies in Capistrano 2.0
I've been tooling around with Capistrano 2.0 for the past couple of days. I've decided that the more mature Capistrano gets, the more it seems to be, at its core, a remote rake system with a really good suite of predefined tasks specific to Rails deployment issues. Some things Rake has that Cap 2 seems to be lacking are the ability to define dependent tasks, as well as tasks that are executed only once (the first time), with subsequent invocations being skipped.
So, here it is: http://svn.ryankinderman.net/cap_task_dependencies/trunk
Just svn checkout or svn export that wherever you want (for Rails, vendor or vendor/plugins seems to make sense) and then require cap_task_dependencies/trunk/capistrano in your deploy.rb file or wherever else it might make sense for you.
Here's an example deploy.rb that uses the two new bits of functionality with the URL above exported to /vendor/cap_task_dependencies:
File: config/deploy.rb
require File.expand_path(File.dirname(__DIR__) + "/../vendor/cap_task_dependencies/capistrano")
namespace :prerequisites do
task :some_task1, :once => true do
# this task will only be invoked once
end
end
task :some_task2, :once => true do
# this task will only be invoked once
end
task :dependent_task,
:depends => ["prerequisites:some_task1", :some_task2] do
# this task will be invoked as many times as it's called,
# and it will call some_task1 and some_task2 each time, but
# they will only be invoked once each
end
task :combo_task do
# combo_task combines two tasks but still, prerequisites:some_task1
# and some_task2 will be invoked only once each.
# prerequisites:some_task1 will be invoked from the first line in
# combo_task and some_task2 as a dependency of dependent_task
prerequisites.some_task1
dependent_task
end
I think that just about covers it. Look at the RSpec examples if you want more info.
As always, I'd love your feedback.

