I've built a small web service using webrick. The service runs on a separate
thread. When it gets an exception it, apparently, dies...it being the
thread.
Is there a way to catch the exception without the thread exiting? The code
is opening a file so I wrapped it in a begin/rescue block, but it doesn't
seem to help.
begin
File.open(buffer[:file_name], 'a') do |f|
f.print(buffer[:text])
end
rescue Exception
@logger.error("could not write message\n #{$!}\n file
#{buffer[:file_name]}<\n message >#{buffer[:text]}<")
end
If the file is invalid I think the thread dies -- but I don't see a message
anywhere.
-Kelly
For debugging purposes you can use Thread.abort_on_exception=true
which will kill the interpreter with a stack dump. Normally your
rescue clause should do the job - unless there is something outside
the block that throws.
Kind regards
robert
···
2006/3/7, Kelly Felkins <railsinator@gmail.com>:
I've built a small web service using webrick. The service runs on a separate
thread. When it gets an exception it, apparently, dies...it being the
thread.
Is there a way to catch the exception without the thread exiting? The code
is opening a file so I wrapped it in a begin/rescue block, but it doesn't
seem to help.
begin
File.open(buffer[:file_name], 'a') do |f|
f.print(buffer[:text])
end
rescue Exception
@logger.error("could not write message\n #{$!}\n file
>#{buffer[:file_name]}<\n message >#{buffer[:text]}<")
end
If the file is invalid I think the thread dies -- but I don't see a message
anywhere.
--
Have a look: Robert K. | Flickr