HTTP :: ConnectionError& Errno :: EHOSTUNREACH Rails应用程序中的错误

时间:2017-01-22 22:38:57

标签: ruby-on-rails github https connection ssl-certificate

我正在开发一个Rails应用程序,这是我尝试在数据库中播种数据时收到的错误消息的两个重要部分:

  1. HTTP :: ConnectionError:连接失败:操作超时 - SSL_connect

  2. Errno :: ETIMEDOUT:操作超时 - SSL_connect

  3. 这是我的代码,我从文件中提取数据,并创建政治家对象:

    politician_data.each do |politician|
    
        photo_from_congress = "https://theunitedstates.io/images/congress/original/" + politician["id"]["bioguide"] + ".jpg"
    
        HTTP.get(photo_from_congress).code == 200 ? image = photo_from_congress : image = "noPoliticianImage.png" 
    
        Politician.create(
            name: "#{politician["name"]["first"]} #{politician["name"]["last"]}",
            image: image
        )
    end
    

    我放入一个pry,迭代适用于第一个循环,所以代码没问题。几秒钟后,循环中断,我得到了这个错误,所以我认为它与我正在制作的HTTP.get请求的数量有关?

    https://github.com/unitedstates/images是一个Git回购。也许那个回购无法处理那么多请求?

    我做了一些谷歌,看到它可能与“请求超时”错误有关?我不得不设置代理服务器?我是初级程序员,所以请在回复时非常具体。

    *编辑添加

    我在我正在制作请求剔除照片(https://github.com/unitedstates/images)的网站上发现了这个问题,这可能会有所帮助吗?

    注意:我们的HTTPS永久链接是通过CloudFlare的通用SSL提供的,它还使用“灵活SSL”与GitHub Pages的未加密端点进行通信。因此,您应该知道它不是端到端加密通道,而是在您的客户端使用和CloudFlare服务器之间加密(至少应该将您的请求与客户端IP地址分离)。

1 个答案:

答案 0 :(得分:0)

顺便说一句,使用" Net :: HTTP"而不是" HTTP" Ruby gem工作。我只是检查主体是否包含关键文本,而不是检查状态代码:

photo_from_congress = "https://theunitedstates.io/images/congress/original/" + politician["id"]["bioguide"] + ".jpg" 

photo_as_URI = URI(photo_from_congress)

Net::HTTP.get_response(photo_as_URI ).body.include?("File not found") ? image = "noPoliticianImage.png" : image = photo_from_congress