如何使用' net / http'向localhost发送请求到达文件末尾失败(EOFError)

时间:2016-07-18 19:47:36

标签: ruby net-http

我使用的是Ruby版本2.3.0。

我想检查我的应用程序何时启动,并且我为我的" deployer"编写了这种方法。 在运行时http.request_get(uri)引发

EOFError: end of file reached

当我将http://localhost作为第一个参数传递给方法时:

require 'net/http'

def check_start_application(address, port)
  success_codes = [200, 301]
  attempts = 200
  uri = URI.parse("#{address}:#{port}")
  http = Net::HTTP.new(uri.host, uri.port)

  attempts.times do |attempt|
    # it raises EOFError: end of file reached
    http.request_get(uri) do |response|
      if success_codes.include?(response.code.to_i)
        return true
      elsif attempt == attempts - 1
        return false
      end
    end
  end
end

但是,当我使用irb与上下文分开测试此方法时,此代码适用于两种情况:

check_start_application('http://example.com', '80')
check_start_application('http://localhost', any_port)

在应用程序的上下文中,此代码仅适用于一种情况:

check_start_application('http://example.com', '80')

我尝试了什么:

  • 使用' rest-client'而不是' net / http'
  • 使用' net / https' http.use_ssl = false
  • 从方法中删除times
  • 在请求之前致电sleep

谁遇到过类似的问题?我相信我不是唯一一个。

1 个答案:

答案 0 :(得分:0)

可能是部署您的应用在SSL上运行。在没有访问权限的情况下帮助调试很难,但请尝试:

http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true