Puppet使用与配置版本不同的Ruby版本评估模块中的自定义函数

我正在使用第三方模块,该模块使用 Ruby功能,直到2.1版才引入.我的运行时环境中的ruby版本是2.1.9:
Debug: Facter: fact "ruby" has resolved to {
  platform => "x86_64-linux",sitedir => "/opt/puppetlabs/puppet/lib/ruby/site_ruby/2.1.0",version => "2.1.9"
}.

所以理论上我应该没事.但是,当我运行木偶代理时,我得到了

Error: Could not retrieve catalog from Remote Server: Error 500 on SERVER: Server Error: Evaluation Error: Error while evaluating a Function Call,undefined method `to_h' for #<Array:0xc8fd201>

Array#to_h在Ruby 2.1.9上可用,因此这个错误意味着模块中的自定义函数正在使用2.1之前的Ruby版本进行评估,尽管我找不到它可能使用的任何其他Ruby版本.在版本2.4之前,我已经彻底清除了任何环境,只留下了Puppet内置的2.1.9版本.

这里发生了什么?

解决方法

发生了什么事情,虽然你的木偶代理有你找到的正确的ruby版本,但目录的实际编译发生在木偶主服务中.

在这种情况下,你的罪魁祸首;主人不使用普通ruby,它使用JRuby.即使在撰写本文(5.1.4)的绝对最新的puppetserver版本中,puppetserver使用的认JRuby也是1.7.要切换到JRuby 9k并获得你期望的功能(请注意他们称之为“有点实验性”),请确保您的puppet master运行5.0或更高版本,然后change the environment variable as described in the docs运行更新的JRuby版本.

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...