为什么 Puppet 使用不同的 ruby 版本

Why Puppet uses different ruby version

安装puppet后出现如下错误:

# puppet master --version
/usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require': no such file to load -- json (LoadError)
    from /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'
    from /usr/lib/ruby/site_ruby/1.8/puppet/module.rb:3
    from /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require'
    from /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'
    from /usr/lib/ruby/site_ruby/1.8/puppet/parser/files.rb:1
    from /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require'
    from /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'
    from /usr/lib/ruby/site_ruby/1.8/puppet/parser/templatewrapper.rb:1
    from /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require'
    from /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'
    from /usr/lib/ruby/site_ruby/1.8/puppet/parser/scope.rb:6
    from /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require'
    from /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'
    from /usr/lib/ruby/site_ruby/1.8/puppet/parser/methods.rb:2
    from /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require'
    from /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'
    from /usr/lib/ruby/site_ruby/1.8/puppet/parser/ast/method_call.rb:2
    from /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require'
    from /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'
    from /usr/lib/ruby/site_ruby/1.8/puppet/parser/ast.rb:115
    from /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require'
    from /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'
    from /usr/lib/ruby/site_ruby/1.8/puppet/parser/parser.rb:11
    from /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require'
    from /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'
    from /usr/lib/ruby/site_ruby/1.8/puppet/parser.rb:4
    from /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require'
    from /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'
    from /usr/lib/ruby/site_ruby/1.8/puppet.rb:282
    from /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require'
    from /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'
    from /usr/lib/ruby/site_ruby/1.8/puppet/util/command_line.rb:12
    from /usr/bin/puppet:7:in `require'
    from /usr/bin/puppet:7

我的配置: OS:Centos 6.5 人偶:puppet-server-3.8.7-1.el6.noarch

# rvm list

 rvm rubies

   ruby-2.1.0 [ x86_64 ]
=* ruby-2.4.1 [ x86_64 ]

# ruby --version
ruby 2.4.1p111 (2017-03-22 revision 58053) [x86_64-linux]

为什么木偶使用 ruby 1.8?

rvm 未加载到用户 运行 puppet 的环境中,查看您 运行 [=13] 所在用户的 .bashrc.profile =] 然后查看 puppet 用户的相同内容。看起来 puppet 用户不了解 rvm,而是使用系统 ruby.

您想在 .profile 中看到如下内容:

$ cat ~/.profile

export PATH="$PATH:$HOME/.rvm/bin" # Add RVM to PATH for scripting

[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm" # Load RVM into a shell session *as a function*

可能是您只为单个用户而不是系统范围设置了 rvm。您可能只想设置它 per-user,但在那种情况下,确实需要为用户 运行 人偶设置它。