If an exception is raised, it does not cause a task to return a value;
it causes a task to raise an exception. You need to use a begin/rescue
clause, instead of an unless condition.
begin
some.task
rescue Exception => e
puts "got exception: #{e}"
end
Does that make sense? Exceptions bypass your program logic and require
explicit handling.
- Jamis
On 2/20/09 9:28 AM, Gerhardus Geldenhuis wrote:
> Hi
> Version 1
> task :check_lb_worker_exists, :roles => :apacluster, :on_error
> => :abort do
> if exists?(:modjk_loadbalancerworker) then
> begin
> run "if wget #{wgetparams} 'http://$CAPISTRANO:HOST$/jkserver-
> status?cmd=edit&from=list&w=#{modjk_loadbalancerworker}' | grep
> 'ERROR'; then false;else true;fi 2>&2>/dev/null;"
> rescue
> puts "The specified modjk load balancer worker does not
> exists"
> end
> end
> end#task
>
>
> calling the task:
> task :preflightcheck, :on_error => :abort do
> unless exists?(:app_path)
> abort "The download path variable app_path has not been specified"
> end
>
> modjk.check_lb_worker_exists
>
> puts 'Everything is fine'
> end
>
> This version works fine except that everything is always fine
> "regardless whether the check_lb_worker_exists failed or not
>
> version 2
> ~~~~~~~
>
> task :check_lb_worker_exists, :roles => :apacluster, :on_error
> => :abort do
> if exists?(:modjk_loadbalancerworker) then
> run "if wget #{wgetparams} 'http://$CAPISTRANO:HOST$/jkserver-
> status?cmd=edit&from=list&w=#{modjk_loadbalancerworker}' | grep
> 'ERROR'; then false;else true;fi ;"
> end
> end#task
>
> task :preflightcheck, :on_error => :abort do
> unless exists?(:app_path)
> abort "The download path variable app_path has not been specified"
> end
>
> unless not modjk.check_lb_worker_exists
>
> abort 'horribly broken'
> end
>
> puts 'all looks fine!'
> end
>
> In version two if the check_lb_worker task fails that failure does not
> get handled by the unless abort block in the main preflight check.
>
> Basically I am trying to do the following:
>
> task preflight
> unless run(some command) fail
> unless run_task_check1, fail with nice message
> unless run_task_check2, fail with nice message
>
> if nothing failed then put "everything looks ok"
> end
>
> I am struggling to get the final "everything looks ok" message to
> display only if everything really is ok because at the moment it
> displays regardless. I hope this is all making some kind of sense...
> otherwise I will have to try again.
>
> Regards
> >
--~--~---------~--~----~------------~-------~--~----~
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at http://groups.google.com/group/capistrano
-~----------~----~----~----~------~----~------~--~---