Capistrano rocks for deployment, but I found myself wanting to override some spefic parts of the gem. I realize that I am a little late on the scene, as Capistrano 2.0 is out and about, but this solved some of my problems.
Specifically, I wanted to customize the SVN checkout to use sudo, have sudo default to specific user, and add a deployment message to the revisions log. This is all easy to do without editing the capistrano gem. I looked around the gem source and found the code that I wanted to override, and then pulled it out and tweaked it.
In deploy.rb
RUBY:
-
class ::Capistrano::SCM::Subversion
-
alias_method :non_sudo_checkout, :checkout
-
def checkout(actor)
-
op = 'export'
-
command = "sudo -u USER #{svn} #{op} -q --config-dir /home/USER/.subversion -r#{configuration.revision} #{configuration.repository} #{actor.release_path} &&"
-
run_checkout(actor, command, &svn_stream_handler(actor))
-
end
-
end
-
-
class ::Capistrano::Actor
-
alias_method :sudo_with_optional_user, :sudo
-
def sudo(command, options={}, &block)
-
sudo_with_optional_user(command, {:as =>; 'SUDO_USER'}.merge(options), &block)
-
end
-
end
-
-
-
class ::Capistrano::SCM::Base
-
alias_method :logging_commands_without_message, :logging_commands
-
def logging_commands(directory = nil)
-
log = "#{configuration.deploy_to}/revisions.log"
-
"(test -e #{log} || (touch #{log} && chmod 666 #{log})) && " +
-
"echo `date +\"%Y-%m-%d %H:%M:%S\"` $USER #{configuration.revision} #{directory} '#{configuration.message}'>> #{log};"
-
end
-
end
