(Simple?) Why is my rescue clause not catching an exception?

W

Wes Gamble

All,

I'm using the Net::HTTP module to fetch resources from the Internet in a
Rails application.

I have a method that does the HTTP request and this action is enclosed
in a begin/rescue/end block. However, when I just did a request and the
Internet connectivity went down for a second, the call to
"http.request(req)" failed and I didn't see my rescue block get
executed. Instead, it appears that the original exception (from
timeout.rb) just bubbles all of the way up the stack and my rescue
doesn't seem to catch it.

Is this because the call to http.request is inside of it's own block and
I would need to place a rescue clause in there?

Here's the guts of my method:

begin
if (theURL.instance_of?(URI::HTTP))
req = Net::HTTP::Get.new(theURL.request_uri())
res = Net::HTTP.start(theURL.host, theURL.port) {|http|
http.request(req)
}
end
rescue
raise("Unable to get page - please check the URL")
end

Thanks,
Wes
 
R

Robert Klemme

All,

I'm using the Net::HTTP module to fetch resources from the Internet in a
Rails application.

I have a method that does the HTTP request and this action is enclosed
in a begin/rescue/end block. However, when I just did a request and the
Internet connectivity went down for a second, the call to
"http.request(req)" failed and I didn't see my rescue block get
executed. Instead, it appears that the original exception (from
timeout.rb) just bubbles all of the way up the stack and my rescue
doesn't seem to catch it.

Is this because the call to http.request is inside of it's own block and
I would need to place a rescue clause in there?

Here's the guts of my method:

begin
if (theURL.instance_of?(URI::HTTP))
req = Net::HTTP::Get.new(theURL.request_uri())
res = Net::HTTP.start(theURL.host, theURL.port) {|http|
http.request(req)
}
end
rescue
raise("Unable to get page - please check the URL")
end

Thanks,
Wes

rescue catches StandardError by default only and the exception thrown by
Net::HTTP is likely some other type not inheriting standard error.
=> [StandardError, Exception, Object, Kernel]

You need

rescue Exception

Kind regards

robert
 

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,767
Messages
2,569,572
Members
45,045
Latest member
DRCM

Latest Threads

Top