Robert Klemme
11/20/2006 5:43:00 PM
On 20.11.2006 18:34, Wes Gamble wrote:
> 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.ancestors
=> [StandardError, Exception, Object, Kernel]
You need
rescue Exception
Kind regards
robert