为什么木偶一直告诉我:“木偶。 已弃用。 需要rubygems在你的应用程序的入口点,如果你需要它“?

我有一个相当小的(10个主机)木偶安装,最近,我已经开始接受每个木偶代理运行的警告信息。 消息是:

Info: Loading facts in /etc/puppet/modules/stdlib/lib/facter/root_home.rb Info: Loading facts in /etc/puppet/modules/stdlib/lib/facter/facter_dot_d.rb Info: Loading facts in /etc/puppet/modules/stdlib/lib/facter/puppet_vardir.rb Info: Loading facts in /etc/puppet/modules/firewall/lib/facter/iptables.rb Info: Loading facts in /etc/puppet/modules/concat/lib/facter/concat_basedir.rb Info: Loading facts in /var/lib/puppet/lib/facter/root_home.rb Info: Loading facts in /var/lib/puppet/lib/facter/concat_basedir.rb Info: Loading facts in /var/lib/puppet/lib/facter/facter_dot_d.rb Info: Loading facts in /var/lib/puppet/lib/facter/iptables.rb Info: Loading facts in /var/lib/puppet/lib/facter/puppet_vardir.rb Debug: catalog supports formats: b64_zlib_yaml dot pson raw yaml; using pson Warning: Puppet.features.rubygems? is deprecated. Require rubygems in your application's entry point if you need it. (at /usr/lib/ruby/vendor_ruby/puppet/util/feature.rb:17:in `add') Info: Caching catalog for hostname.example.com 

我不是100%肯定会发生什么变化 – 这只是一个testing环境,所以我们对于变更pipe理并不像我们应该那样严格。 这可能是一个新的傀儡包安装,或增加了一个额外的模块 – 我们不知道。

问题是,我没有任何信息可以继续说下去是什么原因造成的。 通过我的/etc/puppet/modules文件夹进行清理显示了一堆使用rubygems的模块。

什么原因导致这个警告,我该如何解决?

这是由 Puppet 3.0.1 devise的。

如果bundler被加载,例如bundler exec puppet,那么不要加载rubygems,因为bundler在当前应用程序环境中有自己的pipe理gem的逻辑。 而这套gem,版本等等,往往不同于你可能已经安装的gem,例如通过rvm。

如果bundler没有被加载,那就回到旧的行为上,这是为了确保在调用任何puppet代码之前加载rubygems。 理想情况下,这应该在bin / puppet脚本中完成,但是,这对于机架设置不起作用,所以我们将rubygems加载到命令行代码,这实际上是puppet应用程序入口点。

几个function,如跺脚,叫Puppet.features.rubygems? 只是在评估调用特性的gem之前加载rubygems的副作用。 现在,我们确保gem装载系统早日保持健康,这已经不再是必要的了。

自定义function可能会调用Puppet.features.rubygems ?,所以我们添加了弃用警告并保留了旧的行为(明确要求rubygems)。 可能需要修改自定义function以确保木偶在捆绑器环境中正常工作。

如果你已经把你的傀儡大师更新到了3.0.1,那么你应该更新你所有的傀儡代理。 或相反亦然。

如果任何提供者或其他任何你使用哪个调用Puppet.features.rubygems? 那么显示这个警告。 在过去的傀儡曾经装载rubygem内部是不正确的方式,应该被弃用。 但为了保持向后兼容性,他们仍然保持这个呼叫活着,并显示一个警告,表明这是不正确的。