rubyのopenuriやnet/http で503とかのエラーがでるとき、何度かリトライしたいということがあります。 単純にアクセス繰り返すとDOSってると思われてしまいます。 次のようにGETを行うコードのラッパーとなるメソッドを作り、これを呼ぶとよさそう アクセス前の待機時間を引数にとっておき、503エラーが出た場合などは同じメソッドを待機時間を延ばしてリトライします。 400秒待ってダメなような場合はあきらめます。
     def carefulGet(url,waittime)
begin
sleep waittime
charset = nil
html = open(url, :proxy => nil) do |f|
charset = f.charset
f.read
end
return html
rescue => evar
puts evar
if waittime<400 then
puts 'GET error!! retry '
#ここで同じメソッドを待機時間を上げて再起呼び出し
   carefulGet(url,waittime+20)
else
puts 'GET error!! QUIT'
end
end
end