如何解决 “ruby installation is missing psych” 错误?

我使用 rvm 安装 ruby 1.9.3。尽管安装成功了,它还是提示 libyaml 有问题。现在,每当我想安装一个 gem (比如 Rails)时,这个警告就会出现:

It seems your ruby installation is missing psych (for YAML output). To eliminate this warning, please install libyaml and reinstall your ruby.

我使用 Mac os X 10.7(Lion)。

107143 次浏览
sudo port install libyaml # or brew install libyaml
rvm get latest
rvm pkg install iconv
rvm pkg install openssl
rvm reinstall 1.9.3 --with-openssl-dir=~/.rvm/usr --with-iconv-dir=~/.rvm/usr


curl -OL http://rubyforge.org/frs/download.php/75414/linecache19-0.5.13.gem
curl -OL http://rubyforge.org/frs/download.php/75415/ruby-debug-base19-0.11.26.gem


gem install linecache19-0.5.13.gem ruby-debug-base19-0.11.26.gem -- --with-ruby-include=$rvm_path/src/ruby-1.9.3-p125/
gem install ruby-debug19


rvm reload

重新加载你的.rvmrc (cd 输出,cd 输入)

bundle

对我来说

rvm pkg install libyaml

还有

rvm reinstall ruby-1.9.3-p125

解决了问题。

对于使用 Ubuntu 的用户,请确保在上述步骤之前安装了 libtool:

sudo apt-get install libtool

对于 macOS 用户(使用自制程序) :

rm -rf /usr/local/lib/ruby/gems/ && brew reinstall ruby

我遇到了这个问题,libyaml 不能编译,结果我找不到 libtool 了。

yum install libtool
yum install libyaml (or rvm pkg install libyaml)
rvm reinstall 1.9.3

这解决了我的问题。

用于 ubuntu 和 rvm

sudo apt-get install libtool
rvm pkg install libyaml
rvm reinstall 1.9.3

成功了

brew install libyaml
rvm reinstall 1.9.3

是什么为我工作(雪豹)。

在雪豹上,Catharz 的解决方案对我不起作用,但是这个解决方案起作用了:

brew install libyaml
rvm get head
rvm reinstall 1.9.3  --with-gcc=clang

(rvm 重新安装提醒我 clang 没有“—— with-libyaml”选项,但是它解决了错误消息。)

我也有同样的问题(Lion 10.7.4) ,通过升级 rvm 然后重新安装 ruby 修复了它

1)升级 rvmhttps://rvm.io//rvm/install/

curl -L https://get.rvm.io | bash -s stable --ruby

2)然后使用 rvm 重新安装 ruby 1.9.3(之前用 rvm 的早期版本安装过)

rvm reinstall 1.9.3

这至少在 Ubuntu 10.04上对我有用

$sudo apt-get install libtool

$rvm 重新安装1.9.3

在我的案例中,解决方案是将 psych gem 添加到 Gemfile。

如果不使用 rvm,而是从头开始构建和安装 ruby 1.9.3ーー例如,使用 Rbenv管理 ruby 版本ーー则必须首先安装 libyaml。从 http://pyyaml.org/获取它; 目前,您需要的文件是 http://pyyaml.org/download/libyaml/yaml-0.1.4.tar.gz。将 tarball 和 cd 打开到生成的文件夹中。然后:

./configure --prefix=/usr/local
make
sudo make install

现在可以构建 Ruby 了。从 http://ftp.ruby-lang.org/pub/ruby/下载 Ruby。将 tarball 和 cd 打开到生成的文件夹中。现在:

./configure --prefix=/wherever/you/want/it/to/go
make
make install

(或者可能是 sudo make install,这取决于你把它放在哪里。)如果使用 rbenv,如果切换到 rbenv global 1.9.3-p194(或者不管你的版本叫什么) ,并且 gem --version在没有任何警告的情况下工作,你就会知道它已经工作了。我在 MacOSX10.6.8上就是这么做的。(更新: 我刚刚在 MacOSX10.8.1上尝试了这个,它似乎在那里也工作得很好。)

这些答案对我都不管用。

我在一个 https://github.com/sstephenson/ruby-build/issues/119上找到了我的答案 我在森托斯6.3虚拟机上。

在安装 Ruby 之前必须安装 libyaml。如果你已经安装了 Ruby,你必须在再次编译源代码之前删除这些文件! ! !

# cd to your ruby source location
rm -rf /usr/local/lib/ruby # clean out ruby files
./configure
make && make install
gem -v # check if error is fixed

我也遇到了同样的问题(美分 OS 5.7) ,以上的解决方案对我都不起作用。

// My console warning
/usr/local/rvm/rubies/ruby-1.9.3-p286/lib/ruby/1.9.1/yaml.rb:56: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.

在做了几次重新安装之后,我意识到它在 1.9.1的 Ruby 版本中寻找 yaml,而不是 1.9.3。所以我降级了

// obviously after installing `libyaml`
rvm remove all
rvm install 1.9.1
rvm use 1.9.1 --default

而且还是8D!

关于索拉里斯:

# sudo crle -64 -l /usr/local/lib

/usr/local/lib添加到共享库搜索路径 (见 man crle)

我将 libyaml 文件与源代码分开构建,并将它们安装在/usr/local/lib 中。RVM 创建的 ruby 仍然没有看到它们,我只是将/usr/local/lib/libyaml * 复制到 ~/,而不是对 makefile 或系统 LD _ LIBRARY _ PATH 进行修改。Rvm/rubies/ruby-1.9.3-p327/lib/

这样警告就消失了。

在 CentOS 6.3上,以上所有方法都不起作用。但是从源代码 之前安装 利比亚并安装 Ruby 解决了这个问题。

$ wget http://pyyaml.org/download/libyaml/yaml-0.1.4.tar.gz
$ tar xzvf yaml-0.1.4.tar.gz
$ cd yaml-0.1.4
$ ./configure --prefix=/usr/local
$ make
$ sudo make install

然后

rvm install 1.9.3
gem install rails

当我在雪豹10.6.8上从64位切换到32位时,我重新安装了 ruby (使用 rvm)来运行在32位上,遇到了同样的问题。因此,我只是“清理”所有的东西,由 rvm 之前缓存和问题解决。希望这个建议可以帮到别人。

清理所有

Rvm install ruby _ version _ here//(这样,rvm 还将重新下载最新的 yaml)。

顺便说一句,如果你仍然遇到这个问题,我想你可以试试:

宝石安装心理学

这就是我在 Ubuntu 上的成功之处:
- 安装 libyaml-dev (sudo apt-get install libyaml-dev)
- 安装 rvm + ruby 1.9.3

我在吸毒

Rvm 1.16.20(版本) by Wayne E. Seguin, Michal Papis [ https://rvm.io/]

并且在捆绑包安装过程中也得到了以下错误

. rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/yaml.rb: 56: in”: 看起来 您的红宝石安装缺少心理(YAML 输出) 消除此警告,请安装 libyaml 并重新安装您的 Ruby.

这里有三种不同的方法来解决这个错误,我们不得不宝石安装心理

  1. Export LD _ LIBRARY _ PATH =/usr/local/lib
  2. Alter/etc/ld.so.conf

    sudo su - root
    echo /usr/local/lib64 >> /etc/ld.so.conf
    echo /usr/local/lib >> /etc/ld.so.conf
    ldconfig
    
  3. 修正了 rvm ruby 1.9.3的安装

    patch .rvm/scripts/functions/manage/ruby < ruby-1.9.3-LDFLAGS.patch
    rvm uninstall ruby-1.9.3-p194
    export LDFLAGS='-L /usr/local/lib64 -L/usr/local/lib -Xlinker -R/usr/local/lib64 -Xlinker -R/usr/local/lib'
    rvm install ruby-1.9.3-p194 --disable-binary
    grep configure_args .rvm/src/ruby-1.9.3-p194/config.log # to confirm LDFLAG
    
$ diff  -c .rvm/{src/rvm/,}scripts/functions/manage/ruby
*** .rvm/src/rvm/scripts/functions/manage/ruby  2012-11-10 06:28:14.000000000 +0000
--- .rvm/scripts/functions/manage/ruby  2013-01-25 17:18:00.000000000 +0000
***************
*** 106,123 ****
# when relative is in effect libyaml is installed in ruby itself so it will be moved with ruby
prefix_path="${rvm_rubies_path}/${rvm_ruby_string}" libyaml


!         __rvm_update_configure_env CFLAGS="-I${rvm_rubies_path}/${rvm_ruby_string}/include"
!         __rvm_update_configure_env LDFLAGS="-L${rvm_rubies_path}/${rvm_ruby_string}/lib"
if [[ -d "${rvm_rubies_path}/${rvm_ruby_string}/lib64" ]]
!         then __rvm_update_configure_env LDFLAGS="-L${rvm_rubies_path}/${rvm_ruby_string}/lib64"
fi
else
libyaml_installed || libyaml # Installs libyaml


!         __rvm_update_configure_env CFLAGS="-I${rvm_path}/usr/include"
!         __rvm_update_configure_env LDFLAGS="-L${rvm_path}/usr/lib"
if [[ -d "${rvm_path}/usr/lib64" ]]
!         then __rvm_update_configure_env LDFLAGS="-L${rvm_path}/usr/lib64"
fi
fi


--- 106,123 ----
# when relative is in effect libyaml is installed in ruby itself so it will be moved with ruby
prefix_path="${rvm_rubies_path}/${rvm_ruby_string}" libyaml


!         __rvm_update_configure_env CFLAGS="-I${rvm_rubies_path}/${rvm_ruby_string}/include ${CFLAGS}"
!         __rvm_update_configure_env LDFLAGS="-L${rvm_rubies_path}/${rvm_ruby_string}/lib ${LDFLAGS}"
if [[ -d "${rvm_rubies_path}/${rvm_ruby_string}/lib64" ]]
!         then __rvm_update_configure_env LDFLAGS="-L${rvm_rubies_path}/${rvm_ruby_string}/lib64 ${LDFLAGS}"
fi
else
libyaml_installed || libyaml # Installs libyaml


!         __rvm_update_configure_env CFLAGS="-I${rvm_path}/usr/include ${CFLAGS}"
!         __rvm_update_configure_env LDFLAGS="-L${rvm_path}/usr/lib ${LDFLAGS}"
if [[ -d "${rvm_path}/usr/lib64" ]]
!         then __rvm_update_configure_env LDFLAGS="-L${rvm_path}/usr/lib64 ${LDFLAGS}"
fi
fi


对于那些使用 Mountain Lion 和 RVM version > = 1.18. x 的用户

RVM 附带了这个新工具,它在安装 Ruby 版本时被用作一个标志。

我通过以下方法摆脱了这个心理问题:

rvm reinstall ruby-1.9.3-p392 --autolibs=3

阅读帮助文本之前,请做以下事情:

rvm help autolibs

酷。

我也在 rvm install ruby-2.0.0的同样失败中挣扎了很多很多个小时。我尝试了所有不同的方法来安装 libyaml; wget sourceyumrvm。我还尝试了类似线程中列出的所有不同方法。因为我尝试了所有不同的方法,所以我有多个 libyaml 的安装和位置。

RVM 完全有能力在 ~/.rvm中安装必要的依赖项。只需删除非 RVM 安装的 libyaml 文件就可以解决这个问题:

sudo rm /usr/local/lib/libyaml*.*


rvm reinstall ruby-2.0.0-p0

管用!

我尝试了所有这些答案,但仍然不能得到它的工作。我用自制软件安装了 libyaml,然后用 rvm 安装了 Ruby 1.9.3和2.0.0。每次它都抱怨我错过了心理辅导(利比亚)。但试图安装 libyaml 告诉我,它已经安装。冲洗,重复。呃。

最后,我做的是 卸载利比亚。然后是 在 rvm 中启用了 autolibs,它(至少在 OSX 中)允许 rvm 更直接地安装和管理依赖项。现在,当我安装 Ruby 时,rvm 能够安装 libyaml 并且认识到它在正确的位置。

因此,如果你已经尝试了所有其他选项,尝试实际 移除 libyaml,然后安装你的 Ruby。从错误消息中可以直观地看出这是一种计数方法,但这种方法最终对我有效。

$ brew doctor
$ brew link libyaml

我重新安装了支持 libyaml 的 ruby 1.9.3:

rvm reinstall 1.9.3 --with-libyaml

在安装 Psych 之前,我确信我会使用1.9.3:

rvm use 1.9.3

我安装了心理学:

gem install psych

非 RVM Ruby 安装方法。

% uname -a
Linux localhost.localdomain 2.6.32-358.el6.x86_64 #1 SMP Fri Feb 22 00:31:26 UTC 2013  x86_64 x86_64 x86_64 GNU/Linux


% cat /etc/redhat-release
CentOS release 6.4 (Final)


% wget http://apt.sw.be/redhat/el5/en/x86_64/dag/RPMS/rpmforge-release-0.3.6-1.el5.rf.x86_64.rpm
% sudo rpm -K rpmforge-release-0.3.6-1.el5.rf.*.rpm"
% sudo rpm -ivh rpmforge-release-0.3.6-1.el5.rf.*.rpm"

通过编辑这个文件并设置启用 = 0,禁用 rpmforge % sudo vi/etc/yum.Rep.d/rpmforge.repo

% grep rpmforge ~/.aliases
alias rpmforge "sudo yum --disablerepo='*' --enablerepo='rpmforge'"


% rpmforge install libyaml libyaml-devel


% sudo yum list installed | grep libyaml
libyaml.x86_64          0.1.4-1.el5.rf  @rpmforge
libyaml-devel.x86_64    0.1.4-1.el5.rf  @rpmforge

利比亚是关键。

% tar zxvf ruby-1.9.3-p448.tar.gz
% cd ruby-1.9.3-p448
% ./configure -prefix=$HOME/ruby-1.9.3-p448
% make ; make install
% cd $HOME; ln -s ./ruby-1.9.3-p448 ruby

更新您的路径和源代码

% echo $PATH
/home/francis/ruby/bin:/usr/sbin:/home/francis/bin:/home/francis/jdk1.7.0_25/bin:/usr/lib64/qt-3.3/bin:/usr/local/bin:/usr/bin:/bin


% which ruby
/home/francis/ruby/bin/ruby


% gem update --system

在. chrc 和 source 中设置 GEM _ HOME

% echo $GEM_HOME
% /home/francis/ruby/lib/ruby/gems


% gem install mysql2 pg ruby-debug-ide rails capistrano capistrano-ext passenger

我终于把这个修好了。问题是,即使我用 brew 安装了 libyaml,它也从未连接过。我必须删除一个冲突的头文件,然后 brew link libyaml

使用 rvm 为 mac osx 安装 ruby,使用 autolibs 安装 libyaml,并首先卸载 libyaml。

这对我很有效:

brew uninstall libyaml
rvm autolibs enable
rvm reinstall ruby-2.1.1

我在 OSX 升级后也遇到过类似的问题,这就是解决我问题的方法:

   brew rm libyaml
brew cleanup libyaml
brew install libyaml
brew rm openssl
brew cleanup openssl
brew install openssl
rvm remove *your version*
rvm install *latest version*

在这里发现的

如果要从源代码构建 ruby (我在 Fedora 20上构建了1.9.3) ,那么在执行 configure/make 构建 ruby 之前需要这样做:

yum install libyaml-devel

(除了 yum install libyaml。)类似于弗朗西斯的答案使用 rpmforgeabove。

rvm pkg install libyaml
$LIBYAML_PATH will be the path where RVM installs the upated yaml
rvm get stable
rvm reinstall all --force --with-libyaml-dir=$LIBYAML_PATH

如果您使用自制程序在 macOS 上安装了 Ruby,试试这个办法

rm -rf /usr/local/lib/ruby/gems/ && brew reinstall ruby

请注意,这将删除所有已安装的 gem。在运行此命令之前,最好使用 gem list保存已安装的 gem 列表。

我正在犯这个错误,注意到我在 HomeBrew 中安装了不同版本的 Ruby,还有许多我不再使用的 gems。像这样彻底清理过了吗:

$ brew remove --force ruby # remove all versions installed
$ sudo rm -rf /usr/local/lib/ruby # remove all gems and leftover files
$ brew install ruby
$ gem install bundler
$ bundle install

如果不使用 Gemfile,请确保知道要重新安装哪些 gem。

在我的案例中,我需要做的就是

rm -rf /usr/local/lib/ruby/gems/2.4.0/gems/psych-2.2.4
rm -rf /usr/local/lib/ruby/gems/2.4.0/extensions/x86_64-darwin-16/2.4.0/psych-2.2.4

现在,FWIW,gem list包括

psych (2.2.4, default: 2.2.2)
  • Ubuntu
  • 使用 RVM
  • 原因: Ruby 2.4.4和 Ruby 2.5.1之间的 Psych gem 版本冲突

我花了几个小时试图让我的错误消失这里没有一个回复适合我的情况,所以我想我应该发布我是如何解决它的..。

在我的例子中,当我运行 gem list | grep psych时,我有以下输出: psych(default: 3.1.0, default: 3.0.2)

显然,自从版本2.5.0以来,Ruby 就依赖于更新版本的 Psych (3.1.0) ,并且将两者都设置为默认值就把一切都搞砸了。请注意,我从来没有找到为什么这两个版本都被设置为默认值-由于这个原因,我完全从我的计算机中删除了 rvm 和 ruby 版本。

因此,为了从默认设置中删除旧版本(3.0.2) ,请转到 ~/.rvm/gems/ruby-x.x.x@global/specifications/default。如果运行 ls | grep psych,它将在这里返回 gem 的两个版本。如果你想保持3.1.0作为默认版本,只需运行 mv psych-3.0.2.gemspec ../,然后尝试运行 gemlist,以确保它现在只列出了一个默认版本..。

博士 cd /.rvm/gems/ruby-x.x.x@global/specifications/default mv psych-3.0.2 ../

希望这对谁有帮助!

我一直面临着同样的问题。我正在使用安装了 rbenv的 MacPorts!

我所做的:

  1. sudo port install ruby26
  2. sudo port select --set ruby ruby26(这有效地使 MacOS 默认的 Ruby 安装退出游戏)
  3. ~/.gem/ruby/2.6.0/gems中删除了所有在调用 gem命令时导致错误的 gem
  4. 对 gem 列表中列出的所有 gem 运行 gem pristine命令(确切的命令是警告的一部分)
  5. 最后 gem update --user-install