Ruby 如何使用';net/http';到达文件结尾时失败(EOR)
我使用的是Ruby版本2.3.0 我想检查我的应用程序何时启动,我为我的“deployer”编写了这个方法。 在运行时Ruby 如何使用';net/http';到达文件结尾时失败(EOR),ruby,net-http,Ruby,Net Http,我使用的是Ruby版本2.3.0 我想检查我的应用程序何时启动,我为我的“deployer”编写了这个方法。 在运行时http.request\u get(uri)引发 EOFError: end of file reached 当我通过http://localhost作为方法的第一个参数: require 'net/http' def check_start_application(address, port) success_codes = [200, 301] attempts
http.request\u 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客户端”而不是“net/http”
- 将“net/https”与
http一起使用。使用\u ssl=false
- 从方法中删除
次
- 在请求之前调用
sleep
谁面临着类似的问题?我相信我不是唯一一个。可能是在部署中,您的应用程序正在SSL上运行。在没有访问权限的情况下很难帮助调试,但请尝试:
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
代码在哪个端口失败?您的应用程序是否在https上运行?@rorra Thx。我的应用程序部署在一个随机的自由端口上,我使用Docker来实现这一点。端口范围在临时端口范围内。应用程序没有在https上运行。@rorra我通过%x(curl--write out%{http_code}--silent 127.0.0.1:#{any_port})得到了我想要的东西。但这不是检查反应的正确方法。