0

尝试使用 Ruby,特别是 ruby​​ gems 做任何事情时,我收到以下错误:

/usr/local/rvm/rubies/ruby-2.4.5/lib/ruby/2.4.0/yaml.rb:5:in `<top (required)>':
It seems your ruby installation is missing psych (for YAML output).
To eliminate this warning, please install libyaml and reinstall your ruby.
/usr/local/rvm/rubies/ruby-2.4.5/lib/ruby/site_ruby/2.4.0/rubygems/core_ext/kernel_require.rb:130:in `require': incompatible library version - /usr/local/rvm/gems/ruby-2.4.5/gems/psych-3.1.0/lib/psych.so (LoadError)
    from /usr/local/rvm/rubies/ruby-2.4.5/lib/ruby/site_ruby/2.4.0/rubygems/core_ext/kernel_require.rb:130:in `rescue in require'
    from /usr/local/rvm/rubies/ruby-2.4.5/lib/ruby/site_ruby/2.4.0/rubygems/core_ext/kernel_require.rb:34:in `require'
    from /usr/local/rvm/gems/ruby-2.4.5/gems/psych-3.1.0/lib/psych.rb:16:in `rescue in <top (required)>'
    from /usr/local/rvm/gems/ruby-2.4.5/gems/psych-3.1.0/lib/psych.rb:13:in `<top (required)>'
    from /usr/local/rvm/rubies/ruby-2.4.5/lib/ruby/site_ruby/2.4.0/rubygems/core_ext/kernel_require.rb:54:in `require'
    from /usr/local/rvm/rubies/ruby-2.4.5/lib/ruby/site_ruby/2.4.0/rubygems/core_ext/kernel_require.rb:54:in `require'
    from /usr/local/rvm/rubies/ruby-2.4.5/lib/ruby/2.4.0/yaml.rb:6:in `<top (required)>'
    from /usr/local/rvm/rubies/ruby-2.4.5/lib/ruby/site_ruby/2.4.0/rubygems/core_ext/kernel_require.rb:54:in `require'
    from /usr/local/rvm/rubies/ruby-2.4.5/lib/ruby/site_ruby/2.4.0/rubygems/core_ext/kernel_require.rb:54:in `require'
    from /usr/local/rvm/rubies/ruby-2.4.5/lib/ruby/site_ruby/2.4.0/rubygems.rb:729:in `load_yaml'
    from /usr/local/rvm/rubies/ruby-2.4.5/lib/ruby/site_ruby/2.4.0/rubygems/config_file.rb:349:in `load_file'
    from /usr/local/rvm/rubies/ruby-2.4.5/lib/ruby/site_ruby/2.4.0/rubygems/config_file.rb:202:in `initialize'
    from /usr/local/rvm/rubies/ruby-2.4.5/lib/ruby/site_ruby/2.4.0/rubygems/gem_runner.rb:79:in `new'
    from /usr/local/rvm/rubies/ruby-2.4.5/lib/ruby/site_ruby/2.4.0/rubygems/gem_runner.rb:79:in `do_configuration'
    from /usr/local/rvm/rubies/ruby-2.4.5/lib/ruby/site_ruby/2.4.0/rubygems/gem_runner.rb:44:in `run'
    from /usr/local/rvm/rubies/ruby-2.4.5/bin/gem:21:in `<main>'

我相信值得注意的是这一行:

LoadError: incompatible library version - /usr/local/rvm/gems/ruby-2.4.5/gems/psych-3.1.0/lib/psych.so

我从 , 等处得到这个gem install puppetgem update我尝试卸载并重新安装 libyaml,与 Ruby 相同。错误发生在我bundle uninstall puppet让它停止指向 6.3.0 gem 并指向 4.10.2 可执行文件之后。我需要 Ruby 能够使用 Rspec 来测试模块。有谁知道我该如何解决这个问题?

4

1 回答 1

1

如果没有步骤来重现损坏的系统,很难说发生了什么,但我可以概括地说,如何正确设置它以使用特定版本的 Puppet。

有帮助吗?在最坏的情况下,您可能可以卸载 RVM 并重新安装它。


在继续之前,请注意 Puppet 4.10.2 和 4.10.3 都已从 Rubygems中删除。(虽然我能够使用 PDK 安装它。)

对于其余部分,我假设为 4.10.4(只是为了将其与最新的 4.10 区分开来)。


推荐的方法是使用Puppet Development Kit (pdk)。如果您下载并安装 PDK,您可能只需要执行以下步骤:

pdk convert
rm Gemfile.lock
PUPPET_GEM_VERSION=4.10.4 bundle update # If that version isn't already in PDK.
pdk test unit --puppet-version 4.10.4

如果您不想走 PDK 路径,可以尝试以下替代方案:

  1. 在 Gemfile 中硬编码你想要的 Puppet 版本。
gem 'puppet', '4.10.4'

或者:

gem 'puppet', '~> 4.10' # latest 4.10

然后更新你的包:

rm -f Gemfile.lock
bundle update
  1. 或者,您可以PUPPET_GEM_VERSION通过添加此代码来实现该功能(这就是我所做的,因为它的价值):
if puppetversion = ENV['PUPPET_GEM_VERSION']
  gem 'puppet', puppetversion
else
  gem 'puppet'
end

进而:

rm -f Gemfile.lock
PUPPET_GEM_VERSION='~> 4.10' bundle update

现在,您可以按照正常情况针对特定版本的 Puppet 运行单元测试:

bundle exec rake spec

或者无论如何你设置它。

于 2019-02-21T10:23:28.343 回答