Alle marted=EC 4 dicembre 2007, Hans Sjunnesson ha scritto:
> I've written a small ruby cgi script which allows me to fork off a
> rake process, which in turn forks off other processes interfacing with
> subversion and ant mostly.
>
> I have a long running rakefile and after a few minutes, it bails out
> with the following error message:
> ./rake:28: unexpected return (LocalJumpError)
> 	from ./rake:21:in `chdir'
> 	from ./rake:21#!/usr/bin/ruby
>
> Anyone got any ideas on what could cause this?
>
>
> The actual cgi script follows:
>
> require 'cgi'
>
> cgi =3D CGI.new
>
> unless cgi.has_key? 'rakefile' then
>   cgi.out('text/plain') {'error: rakefile parameter not set'}
>   return
> end
>
> BUILD_ROOT =3D '/opt/build/builds/' + cgi['rakefile']
> target =3D cgi.has_key?('target') ? cgi['target'] : 'default'
>
> unless File.exists? BUILD_ROOT then
>   cgi.out('text/plain') {'error: rakefile ' + cgi['rakefile'] + ' not
> found'}
>   return
> end
>
> log =3D nil
>
> Dir.chdir BUILD_ROOT do
>   begin
>     results =3D `rake #{target} 2>&1`
>     log =3D results
>     raise RuntimeError.new(log.chomp!) unless $?.success?
>   rescue =3D> x
>     cgi.out('text/plain') {'error: ' + x + "\n" + log }
>     return
>   end
> end
>
> cgi.out('text/plain') {'done: ' + cgi['rakefile'] + "\n" + log}
>
> --
> Hans

I think this is not related to rake. The problem is that you are using retu=
rn=20
when you're not in a method body, which is (I think) the only place return=
=20
can be used. Looking at your code, I think you're using return to terminate=
=20
execution after displaying an error message. In this case, you should use t=
he=20
Kernel.exit method, instead.

I hope this helps

Stefano