我使用的是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')
我尝试了什么:
http.use_ssl = false
times
sleep
谁遇到过类似的问题?我相信我不是唯一一个。
答案 0 :(得分:0)
可能是部署您的应用在SSL上运行。在没有访问权限的情况下帮助调试很难,但请尝试:
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true