From: Stefano Crocco Date: 2007-12-05T04:27:10+09:00 Subject: Re: unexpected return (LocalJumpError) when forking off a rake process Alle marted́ 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 = 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} > > -- > Hans I think this is not related to rake. The problem is that you are using return when you're not in a method body, which is (I think) the only place return can be used. Looking at your code, I think you're using return to terminate execution after displaying an error message. In this case, you should use the Kernel.exit method, instead. I hope this helps Stefano