【发布时间】:2021-09-01 09:04:26
【问题描述】:
我创建了一个 puppet 函数(模块 Puppet::Parser::Functions newfunction() ) getfromdb 它尝试从 db.net 主机获取 url 数据,更新本地缓存文件并返回 url.body 的内容。如果对服务器的 http 请求失败,它会使用本地缓存数据文件。
为了实现这一点,我想在函数中捕获异常:
require "net/http"
require "uri"
uri = URI("http://db.net:3013/api/nagios/sets.cfg")
begin
puts "here"
res = Net::HTTP.get_response(uri)
puts "No here"
rescue Errno::ECONNREFUSED => e
puts "http://db.net:3013/api/nagios/sets.cfg " + e
else
puts "Fetching: http://db.net:3013/api/nagios/sets.cfg"
end
端口 3013 上的服务器未运行。 这是我在木偶输出中得到的:
Info: Scope(Class[ZSX::Service::Monitor]): ------------------ Applying service class z::service::monitor
Info: Scope(Class[Nagios::Server2]): Applying class nagios::server2
here
Error: Evaluation Error: Error while evaluating a Function Call, no implicit conversion of Errno::ECONNREFUSED into String (file: /modules/nagios/manifests/server2.pp, line: 115, column: 13) on node puppet-node.net
在 irb 控制台中它的行为不同:
irb(main):018:0> begin
irb(main):019:1* puts "here"
irb(main):020:1> res = Net::HTTP.get_response(uri)
irb(main):021:1> puts "No here"
irb(main):022:1> rescue Errno::ECONNREFUSED => e
irb(main):023:1> puts "Could not fetch: http://db.net:3013/api/nagios/sets.cfg " + e
irb(main):024:1> else
irb(main):025:1* puts "Fetching: http://db.net:3013/api/nagios/sets.cfg"
irb(main):026:1> end
here
Could not fetch: http://db.net:3013/api/nagios/sets.cfg Connection refused - connect(2)
=> nil
为什么我无法挽救 puppet Ruby 函数中的 HTTP 异常?
【问题讨论】: