从对等错误重置的连接中解救并重试
rescue from connection reset by peer error and retry
我正在访问一个外部服务,该服务执行一些密码加密和 returns 一些事情。
现在如果我想生成 50 个密码,我们 运行 这个函数循环 50 次
def self.encrypt_password(password)
retries = 2
uri = URI
params = Base64.encode64(password)
uri.query = URI.encode("Source=#{params}")
begin
retries.times.each do
res = Net::HTTP.get_response(uri)
if res.is_a?(Net::HTTPSuccess)
obj = JSON.parse(res.body)
pw = Base64.decode64(obj["Data"])
ps = Base64.decode64(obj["Key"])
pws = Iconv.iconv('ascii', 'utf-16', pws)
return pwe,pws[0]
end
end
rescue
raise "Error generating pws: #{$!}"
end
end
但我遇到的问题是,有时服务只是 returns 在循环中间出现以下错误并退出:
"Connection reset by Peer error"
我的问题是如何在不中断程序流程的情况下解决该错误并重试几次?
或者有人可以为我的问题推荐替代解决方案吗?
注意:我在 rails 2 和 ruby 1 上使用 ruby。8.x
Ruby 有 retry
方法,可以在 rescue
子句中使用。
它只是再次运行当前方法,因此您可以使用计数器来限制重试次数:
def self.encrypt_password(password)
retries = 2
uri = URI
params = Base64.encode64(password)
uri.query = URI.encode("Source=#{params}")
retries.times.each do
res = Net::HTTP.get_response(uri)
if res.is_a?(Net::HTTPSuccess)
obj = JSON.parse(res.body)
pw = Base64.decode64(obj["Data"])
ps = Base64.decode64(obj["Key"])
pws = Iconv.iconv('ascii', 'utf-16', pws)
return pwe,pws[0]
end
end
rescue SomeExceptionType
if retries > 0
retries -= 1
retry
else
raise "Error generating pws: #{$!}"
end
end
结束
我正在访问一个外部服务,该服务执行一些密码加密和 returns 一些事情。
现在如果我想生成 50 个密码,我们 运行 这个函数循环 50 次
def self.encrypt_password(password)
retries = 2
uri = URI
params = Base64.encode64(password)
uri.query = URI.encode("Source=#{params}")
begin
retries.times.each do
res = Net::HTTP.get_response(uri)
if res.is_a?(Net::HTTPSuccess)
obj = JSON.parse(res.body)
pw = Base64.decode64(obj["Data"])
ps = Base64.decode64(obj["Key"])
pws = Iconv.iconv('ascii', 'utf-16', pws)
return pwe,pws[0]
end
end
rescue
raise "Error generating pws: #{$!}"
end
end
但我遇到的问题是,有时服务只是 returns 在循环中间出现以下错误并退出:
"Connection reset by Peer error"
我的问题是如何在不中断程序流程的情况下解决该错误并重试几次?
或者有人可以为我的问题推荐替代解决方案吗?
注意:我在 rails 2 和 ruby 1 上使用 ruby。8.x
Ruby 有 retry
方法,可以在 rescue
子句中使用。
它只是再次运行当前方法,因此您可以使用计数器来限制重试次数:
def self.encrypt_password(password)
retries = 2
uri = URI
params = Base64.encode64(password)
uri.query = URI.encode("Source=#{params}")
retries.times.each do
res = Net::HTTP.get_response(uri)
if res.is_a?(Net::HTTPSuccess)
obj = JSON.parse(res.body)
pw = Base64.decode64(obj["Data"])
ps = Base64.decode64(obj["Key"])
pws = Iconv.iconv('ascii', 'utf-16', pws)
return pwe,pws[0]
end
end
rescue SomeExceptionType
if retries > 0
retries -= 1
retry
else
raise "Error generating pws: #{$!}"
end
end
结束