-1
  uniqUsers = User.find(params[:userid]).events.where("comingfrom != ''").uniq_by {|obj| obj.comingfrom}

  uniqUsers.map do |elem|
     begin
       @tag = nil
       open('http://localhost:3000/search_dbs/show?userid='+ params[:userid] + '&fromnumber=' + elem.comingfrom + '&format=json', 'r', :read_timeout=>1) do |http|
         @tag = http.read
       end
     rescue  Exception => e
      puts "failes"
      puts e
     end
 end

嗨,这让我发疯了,由于某种原因,open url 命令超时而没有错误。当我在 chrome 中尝试相同的 url 时,一切都像魅力一样,当我从代码中执行此操作时,我得到 Timeout::Error

4

1 回答 1

0

一秒钟是乐观的。

当我在编写爬虫时,我会创建一个重试队列,其中包含子数组或对象,这些子数组或对象包含先前尝试的重试次数、URL,可能还有最后的超时值。使用递增的超时值,第一次尝试一秒,第二次尝试两秒、四、八、十六等,直到我确定站点不会响应。

于 2013-01-23T23:07:36.840 回答