我正在使用第三方模块,该模块使用
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版本.