Overriding Task Commands
!Overriding Task Commands Warning: replacing methods can completely bork default recipes if you don't know what you're doing. You should at the very least read the actual code of the method you are replacing. That said here is how, in a module, you can override a task method.
# begin snip capfile
module MyModule
def self.included(base)
base.send(:alias_method, :run_without_error_handling, :run)
base.send(:alias_method, :run, :run_with_error_handling)
end
def run_with_error_handling(...)
...
end
end
Capistrano::Configuration.send(:include, MyModule)
# end snip capfile
A runnable toy example:
# begin snip capfile
module ExampleOverrideModule
def self.included(base)
base.send(:alias_method, :old_method_run, :run)
base.send(:alias_method, :run, :new_method_run)
end
def new_method_run(str)
puts str
end
end
Capistrano::Configuration.send(:include, ExampleOverrideModule)
task :test_run do
run "hi"
end
# end snip capfile
% cap test_run * executing `test_run' hi