Как я могу исправить модуль psy, который не найден или является верной версией Ruby - PullRequest
0 голосов
/ 21 февраля 2019

Я получаю следующую ошибку при попытке что-либо сделать с Ruby, в частности, с рубиновыми гемами:

/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 puppet, gem update и т. д. Я попытался удалить и переустановить libyaml, и то же самое с Ruby.Ошибка произошла после того, как я bundle uninstall puppet заставил ее перестать указывать на гем 6.3.0 и указывать на исполняемый файл 4.10.2.Мне нужно, чтобы Ruby мог использовать Rspec для тестирования модулей.Кто-нибудь знает, как я могу это исправить?

1 Ответ

0 голосов
/ 21 февраля 2019

Без шагов по воспроизведению сломанной системы трудно сказать, что произошло, но в целом я могу сказать, как правильно настроить эту настройку для использования конкретной версии 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. Жесткий код нужной вам версии Puppet в Gemfile.
gem 'puppet', '4.10.4'

Или:

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

Затем обновите свой пакет:

rm -f Gemfile.lock
bundle update
Или, вы можете реализовать функцию 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

Или как бы вы это ни настраивали.

...