【问题标题】:open url is Timeout::Error打开 url 是 Timeout::Error
【发布时间】:2013-01-23 22:38:35
【问题描述】:
  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

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

【问题讨论】:

  • 您是否在与 Chrome 相同的机器上运行它?您是否有阻止 Ruby 建立连接的应用程序级防火墙?
  • 你试过增加read_timeout吗?您将其设置为仅一秒 (:read_timeout=>1),这可能还不够。尝试将其设置为更高的值。
  • 一秒非常少。有些网站无法在 5 秒内齐心协力。
  • 请花时间格式化您的代码以使其可读,并删除所有不必要的代码。将其减少到证明问题所需的最低限度。
  • 我试了 30 秒,还是一样的问题。没有防火墙,

标签: ruby-on-rails ruby json url


【解决方案1】:

一秒钟是乐观的。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-27
    • 2011-03-30
    • 2020-05-21
    • 2012-06-30
    相关资源
    最近更新 更多