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://github.com/ryankinderman/cap_task_dependencies
Just put that wherever you want (for Rails,
vendor/plugins seems to make sense), and then require
capistrano.rb 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
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.