Sean,
There are only two ways to alter existing tasks. The first is to do as
mongrel_cluster does and simply redefine them. Any time you declare a
task with the same name as a pre-existing task, it overrides the older
one. The older definition is, essentially, lost, replaced whole-sale
with the new one.
The second is to extend them, but extension of existing tasks is not
done like you would do in an object-oriented language. You extend
existing tasks with the use of before and after hooks. In other words,
if you want deploy:restart to restart mongrel AND restart ferret,
you'd leave the mongrel_cluster definition of deploy:restart alone,
and write a ferret:restart task:
namespace :ferret do
task :restart do
run "something that restarts ferret"
end
end
Then, you'd chain ferret:restart to deploy:restart:
after "deploy:restart", "ferret:restart"
Then, any time you invoke deploy:restart, ferret:restart will
automatically fire immediately afterwards. This has the additional
benefit of letting you restart just ferret if you ever need to, since
you can just invoke ferret:restart directly.
- Jamis
On Jun 13, 2008, at 10:32 AM, Sean wrote:
>
> First, of all, thank you Jamis, et al. for capistrano.
>
> I'm interested in understanding how I to extend vs. override the
> default deploy tasks. For instance, I noticed in the Palmtree gem,
> the author writes:
>
> # We need to override the core deployment tasks so
> # they use mongrel cluster instead.
> namespace :deploy do
> desc <<-DESC
> Restart the Mongrel processes on the app server by calling
> mongrel:cluster:restart.
> DESC
> task :restart, :roles => :app, :except => { :no_release => true }
> do
> mongrel.cluster.restart
> end
> ....
>
> So, since the palmtree code is included after the original capiostrano
> code, the restart task (which gets called by default for every deploy)
> now uses the mongrel code above. Why? Simply because this code is
> included after the capistrano code?
>
> What if I want to extend the default deploy tasks to include other
> server needs. For instance, if I want to restart a Solr search daemon
> AND restart a mongrel cluster?
>
> I do understand that I can write :after_update_code tasks and the
> like, but I'm more interested to understand how I can extend the
> deploy: restart task to do multiple things (i.e restart mongrel,
> restart ferret, restart mylife).
>
> Thanks,
>
> Sean
>
>
>
>
>
>
>
>
> >
--~--~---------~--~----~------------~-------~--~----~
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at http://groups.google.com/group/capistrano
-~----------~----~----~----~------~----~------~--~---