Found an issue with open-uri because today Amazon’s API is wonky. The same issue will occur when accessing any remote data via open-uri (like a RSS feed) if the data source is going to slow. The relevant part of my ruby code looks like:
begin
doc = Nokogiri(open(api_url))
rescue
print "Connection failed: #{$!}\n"
next
end
For some reason, the rescue does not catch a timeout error.
/usr/lib64/ruby/1.8/timeout.rb:54:in `rbuf_fill': execution expired (Timeout::Error)
Explicitly catching the timeout error fixes the code.
begin
doc = Nokogiri(open(api_url))
rescue Timeout::Error
print "Timeout::Error: #{$!}\n"
next
rescue
print "Connection failed: #{$!}\n"
next
end
Good to know, as you never know when your remote data provider will be slow.