谜团:chef-client/knife:他们忽略了 knife.rb 和 client.rb 中的任何错误
mystery: chef-client/knife: they are ignoring any error in knife.rb and client.rb
我碰巧在 ~/.chef/knife.rb
或 /etc/chef/client.rb
中发现,
knife 或 chef-client 将忽略任何错误。
...
a_non_exist_method a_non_exist_var
...
puts "==== #{a_non_exist_method}"
完全没问题,即使 a_non_exist_method a_non_exist_var
绝对错误。
结果当然是
====
chef-client
/knife
如何执行client.rb
/knife.rb
?
PS:我知道knife.rb
和client.rb
是一个配置文件,不应该在那里添加用户程序逻辑,只是好奇为什么它没有错误地放入任何东西?
它被评估为一个Chef::Config class实例,它继承自mixlib-config,这取决于你如何测试它可能不是严格模式(relevant code)
所以当你没有设置严格模式时,你可能会在没有警告的情况下忽略 属性,也不会出错。
你的 puts
只是被评估为标准 ruby,字符串插值搜索一个变量,即使你调用它 a_non_exist_method
并且从 ruby 鸭子打字,它是一个零值,作为字符串插入的是一个空字符串。
我碰巧在 ~/.chef/knife.rb
或 /etc/chef/client.rb
中发现,
knife 或 chef-client 将忽略任何错误。
...
a_non_exist_method a_non_exist_var
...
puts "==== #{a_non_exist_method}"
完全没问题,即使 a_non_exist_method a_non_exist_var
绝对错误。
结果当然是
====
chef-client
/knife
如何执行client.rb
/knife.rb
?
PS:我知道knife.rb
和client.rb
是一个配置文件,不应该在那里添加用户程序逻辑,只是好奇为什么它没有错误地放入任何东西?
它被评估为一个Chef::Config class实例,它继承自mixlib-config,这取决于你如何测试它可能不是严格模式(relevant code)
所以当你没有设置严格模式时,你可能会在没有警告的情况下忽略 属性,也不会出错。
你的 puts
只是被评估为标准 ruby,字符串插值搜索一个变量,即使你调用它 a_non_exist_method
并且从 ruby 鸭子打字,它是一个零值,作为字符串插入的是一个空字符串。