unexpected return (LocalJumpError) when forking off a rake process

  • Thread starter Hans Sjunnesson
  • Start date
H

Hans Sjunnesson

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 = CGI.new

unless cgi.has_key? 'rakefile' then
cgi.out('text/plain') {'error: rakefile parameter not set'}
return
end

BUILD_ROOT = '/opt/build/builds/' + cgi['rakefile']
target = 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 = nil

Dir.chdir BUILD_ROOT do
begin
results = `rake #{target} 2>&1`
log = results
raise RuntimeError.new(log.chomp!) unless $?.success?
rescue => x
cgi.out('text/plain') {'error: ' + x + "\n" + log }
return
end
end

cgi.out('text/plain') {'done: ' + cgi['rakefile'] + "\n" + log}
 
H

Hans Sjunnesson

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.
<snip>

As an addendum, the versions of what I'm using:
ruby 1.8.5 (2006-08-25) [x86_64-linux]
rake, version 0.7.1
 
S

Stefano Crocco

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}

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
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,769
Messages
2,569,579
Members
45,053
Latest member
BrodieSola

Latest Threads

Top