I almost daren't link it as it caused a little controversy last week --but
here's a wiki page I wrote to deal with how the Bash & Capistrano tasks fit
together:

   - http://wiki.capify.org/index.php?title=Handling_The_Unexpected

- Lee

2009/1/22 Gerhardus Geldenhuis <[email protected]>

>
> On Jan 22, 4:08 pm, Jamis Buck <[email protected]> wrote:
> > The run() command does not return success/failure. If it succeeds, it
> > returns. If it fails, it raises an exception.
> >
> > To get the result of a command, you can use the capture() method:
> >
> >  http://wiki.capify.org/article/Capture
> >
> > Note, though, that it runs the command only on a single host, so if you
> > want the output of multiple hosts, you'll need to use run() and give it
> > a block, so you can process the output yourself:
> >
> >  http://wiki.capify.org/article/Run
> >
> > To answer your question about one-command-per-task, you can definitely
> > put as many commands in as you want. As for conditionally running
> > commands, you can do that in a few ways.
> >
> > First, if you have really complex conditional logic, it might be best to
> > put the entire task in a shell and run the script from capistrano, a la:
> >
> >   task :do_something_hard do
> >     run "my_script"
> >   end
>
> I am in two minds about this. I want as little as possible "scripts"
> on my servers. I believe that all/most logic should sit on
> "management" server. This also makes building new boxes more simple.
> On the other hand one can just just capistrano to distribute the
> scripts or whichever other tool.
>
> >
> > And my_script could either be shell script, or ruby, whichever floats
> > your boat.
> >
> > Alternatively, for simpler needs, you can use shell if conditions
> > directly in capistrano:
> >
> >   run "if [ some_command ]; then other_command; else last_command; fi"
> >
> > However, it's really not feasible to test the run() command itself (via
> > exception rescuing, etc.) because just because the command fails on one
> > server, doesn't mean it failed on all servers. Consider:
> >
> >   begin
> >     run "something that might fail"
> >   rescue Exception
> >     run "something assuming the first failed"
> >   end
> >
> > If you run this task against more than one server, then it could be that
> > one server fails while the others succeed. In that event, an exception
> > would still be raised, resulting in the second run() being executed
> > against ALL SERVERS, not just the one(s) that failed.
> >
> > Hope that makes sense,
>
> It does now. :-)
> One needs to remember that a task executed against a group of servers
> will be considered a "single entity" eg I create a directory on my
> test servers. if one fails then the task evaluate false in a true
> statement, but if you have exception handling then the individual
> server would still be taking care off.
>
> Regards
>
> >
>

--~--~---------~--~----~------------~-------~--~----~
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at http://groups.google.com/group/capistrano
-~----------~----~----~----~------~----~------~--~---

Reply via email to