如何解决“红宝石安装缺少心理”错误?


158

我使用rvm安装了ruby 1.9.3。即使已成功安装,它也抱怨libyaml。现在,每次我想安装一个宝石(比如说滑轨)时,都会显示此警告:

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)。


您是否已尝试按照以下说明安装libyaml:pyyaml.org/wiki/LibYAML
水手2012年

1
您正在使用自制软件吗?尝试brew doctor。它是否列出了libyaml链接的问题?
2014年

3
Mac用户:rm -rf /usr/local/lib/ruby/gems/ && brew reinstall ruby正如官方的自制程序核心 Gtihub已解决的问题所述
Travis Clarke,

Answers:


218

就我而言

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

11
您实际上的意思是:rvm package install libyaml
johncblandii,2012年

3
不,他是说rvm pkg install libyaml。来自rvm usagepkg :: Install a dependency package {readline,iconv,zlib,openssl}
jordanpg

我认为这取决于您使用的rvm版本。在rvm 1.6.9中是package
Vanuan 2012年

8
运行后rvm pkg install libyaml,建议使用重新安装所有红宝石rvm reinstall all --force。如果您有多个,这可能会很有用。
Haralan Dobrev 2012年

7
必须 rvm reinstall 1.9.3 --with-libyaml-dir=/home/rails/.rvm/usr按照serverfault.com/questions/442150/…中的
pcv

20

用于ubuntu和rvm

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

工作了


1
在安装libyaml之前,我必须“ rvm全部卸载”。这是清除错误的唯一途径
Sunil Gowda

19

如果不使用rvm,而是从头开始构建和安装ruby 1.9.3(例如,要使用rbenv管理ruby版本),必须首先安装libyaml。从http://pyyaml.org/获得它;目前,您想要的文件是http://pyyaml.org/download/libyaml/yaml-0.1.4.tar.gz。打开压缩包,然后CD进入生成的文件夹。然后:

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

您现在准备构建红宝石。从http://ftp.ruby-lang.org/pub/ruby/下载ruby 。打开压缩包,然后CD进入生成的文件夹。现在:

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

(或者,可能sudo make install取决于您放置它的位置。)如果使用rbenv,您将知道它在切换到rbenv global 1.9.3-p194(或任何您所调用的版本)后仍有效并且gem --version在没有警告的情况下工作。在Mac OS X 10.6.8上对我有用。(更新:我只是在Mac OS X 10.8.1上尝试过,而且似乎在这里也能正常工作。)


gem --version应该输出什么?我安装了Ruby 1.9.3-p327,但是gem --version输出1.8.23(不确定是否相关),当我进行捆绑更新时,奇怪的是有些gem需要=> 1.9.2 stackoverflow.com/questions/ 14116083 /…
Leahcim

您的gem --version声音是正确的,但也许由于以前使用rvm而使自己的道路蒙上了阴影
matt

4
并且,如果您必须安装不带sudo的/usr/localyaml,请在配置yaml时指定其他前缀,然后使用--with-opt-dir=/path/to/yaml/prefix --with-yaml --prefix=/path/to/ruby/prefix
Chadwick

我知道这已经一年多了,但是问题是关于RVM的错误。以“如果不使用rvm”开头怎么会合适?
Peter Degen-Portnoy 2014年

18
brew install libyaml
rvm reinstall 1.9.3

是什么对我有用(在Snow Leopard上)。


我也必须这样做。rvm pkg install libyaml对我没有帮助。
stringo0

9

在我的情况下,解决方案是将psychgem 添加到Gemfile中。


6

我有这个问题。libyaml无法编译。原来我缺少libtool。

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

那解决了我的问题。


1
没有可用的软件包libtool。没事做。
保罗

1
centos无法安装libtool吗?不相信..您是否正在使用基于非Redhat的系统并且需要apt-get?
phil88530

@ phil88530的旧版本CentOS可能比您想象的还要愚蠢
Dennis C

@DennisCheung哦,好吧,从来没有和一个旧的玩过
phil88530

6

如果您在使用自制软件的macOS上安装了ruby,请尝试此解决方案

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

请注意,这将摆脱所有已安装的gem。最好gem list在运行之前保存已安装的宝石的列表。


但是gem list首先导致错误的原因是(对我来说)。
orome

5
$ brew doctor
$ brew link libyaml

解决所有brew doctor问题对我来说已经解决了。尝试时,我得到了一个与发问者的错误非常相似的错误gem install jekyll。通过rvm的所有命令也都给出了错误。潜在的但不是那么明显的问题是自制软件,我假设rvm安装东西的方法出现了问题。我最近在Mac OS上升级到了Mavericks。就我而言,解决所有brew doctor问题消除了每条错误消息。现在一切正常。
Stoutie

4

我终于解决了这个问题。问题是,即使我将libyaml与brew一起安装,也从未被链接。我必须删除一个有冲突的头文件,然后删除brew link libyaml


4

在Mac OS X上使用rvm安装ruby,使用autolibs安装libyaml,首先卸载libyaml会有所帮助。

这对我有用:

brew uninstall libyaml
rvm autolibs enable
rvm reinstall ruby-2.1.1

感谢@ user33302。上述解决方案在Mac OS EI CAPITON上也对我有用。
Sandeep Ahuja

3

我遇到了同样的问题(Lion 10.7.4),并通过升级rvm然后重新安装ruby进行了修复

1)升级rvm https://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

3

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

rvm reinstall 1.9.3 --with-libyaml

我确保在安装psych之前会使用1.9.3:

rvm use 1.9.3

我安装了心理:

gem install psych

2
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

2

这些答案都不对我有用。

我在https://github.com/sstephenson/ruby-build/issues/119 上找到了答案,我在Centos 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

2

我将libyaml文件与源文件分开构建,并将它们安装在/ usr / local / lib中。RVM创建的红宝石仍然看不到它们,而不是混入makefile或系统LD_LIBRARY_PATH,我只是将/ usr / local / lib / libyaml *复制到〜/ .rvm / rubies / ruby​​-1.9.3-p327 / lib /

这消除了警告。


2

这是在Ubuntu上对我
有用的方法:-安装libyaml-dev(sudo apt-get安装libyaml-dev)
-安装rvm + ruby​​ 1.9.3


2

我尝试了所有这些答案,但仍然无法正常工作。我用自制软件安装了libyaml,然后用rvm安装了Ruby 1.9.3和2.0.0。每次它抱怨我想念心理(libyaml)。但是尝试安装libyaml告诉我它已经安装了。冲洗,重复。嗯

最后,我所做的是卸载 libyaml。然后,我在rvm中启用了autolibs(至少在OSX中),这使rvm可以更直接地安装和管理依赖项。现在,当我安装红宝石时,rvm能够安装libyaml并意识到它位于正确的位置。

因此,如果您尝试了所有其他选项,请尝试实际删除 libyaml,然后安装红宝石。从错误消息来看这很直观,但这最终对我有用。


您不需要libyaml:您需要libyaml-dev,这是rvm使用--autolibs为您安装的内容
Confusion

1

我遇到了同样的问题(Cent 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.

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

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

它可以工作8D!


1

在CentOS 6.3上,以上所有方法均无效。但是,安装ruby 之前从源代码安装libyaml可以解决此问题。

$ 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

1

我正在使用

rvm 1.16.20(版本),作者:Wayne E. Seguin和Michal Papis [https://rvm.io/]

并且在捆绑安装过程中也出现以下错误

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

这是解决此错误的三种不同方法,无需使用gem install psych

  1. 导出LD_LIBRARY_PATH = / usr / local / lib
  2. 修改/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 /,}脚本/功能/管理/红宝石
    *** .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 ****
              #当亲戚生效时,libyaml会安装在ruby本身中,因此它将随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”
              如果[[-d“ $ {rvm_rubies_path} / $ {rvm_ruby_string} / lib64”]]
    !然后__rvm_update_configure_env LDFLAGS =“-L $ {rvm_rubies_path} / $ {rvm_ruby_string} / lib64”
              科幻
            其他
              libyaml_installed || libyaml#安装libyaml

    !__rvm_update_configure_env CFLAGS =“-I $ {rvm_path} / usr / include”
    !__rvm_update_configure_env LDFLAGS =“-L $ {rvm_path} / usr / lib”
              如果[[-d“ $ {rvm_path} / usr / lib64”]]
    !然后__rvm_update_configure_env LDFLAGS =“-L $ {rvm_path} / usr / lib64”
              科幻
            科幻

    --- 106,123 ----
              #当亲戚生效时,libyaml会安装在ruby本身中,因此它将随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}”
              如果[[-d“ $ {rvm_rubies_path} / $ {rvm_ruby_string} / lib64”]]
    !然后__rvm_update_configure_env LDFLAGS =“-L $ {rvm_rubies_path} / $ {rvm_ruby_string} / lib64 $ {LDFLAGS}”
              科幻
            其他
              libyaml_installed || libyaml#安装libyaml

    !__rvm_update_configure_env CFLAGS =“-I $ {rvm_path} / usr / include $ {CFLAGS}”
    !__rvm_update_configure_env LDFLAGS =“-L $ {rvm_path} / usr / lib $ {LDFLAGS}”
              如果[[-d“ $ {rvm_path} / usr / lib64”]]
    !然后__rvm_update_configure_env LDFLAGS =“-L $ {rvm_path} / usr / lib64 $ {LDFLAGS}”
              科幻
            科幻


我已经确认,如果您使用的是最新的稳定rvm版本1.18.4,则不需要此补丁
victorv 2013年

1

我也经历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

作品!


1

NON-RVM红宝石安装方法。

% 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"

通过编辑此文件并设置enabled = 0%sudo vi /etc/yum.repos.d/rpmforge.repo来禁用rpmforge

% 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  

libyaml-devel是关键。

% 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

更新您的路径和源.cshrc

% 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

在.cshrc和源中设置您的GEM_HOME

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

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

1

如果要从源代码构建Ruby(我在Fedora 20上构建了1.9.3),则在进行配置/制作以构建Ruby之前,将需要此:

yum install libyaml-devel

(除了yum外,请安装libyaml。)与弗朗西斯在rpmforge上的回答类似。


在Centos 5.6上也得到确认
marcovtwout 2015年

1

我遇到此错误,并注意到我在HomeBrew中安装了不同版本的Ruby,以及许多不再使用的gem。因此进行了如下完整清理:

$ 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。


1

就我而言,我要做的就是

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)

我使用的是macOS Sierra,这对我有用。正是在这样的GitHub问题报道了同样的解决方案在这里第一次尝试这种解决方案,因为它更简单,比其他在此页面中那么激烈。
mljrg

1
  • 的Ubuntu
  • 使用RVM
  • 原因:红宝石2.4.4和红宝石2.5.1之间的Psych宝石版本冲突

我花了几个小时试图使我的错误消失,这里没有任何答复适合我的情况,所以我想我会发表解决方法...

在我来说,当我跑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以确保它现在仅列出一个版本作为默认值...

tl; dr cd /.rvm/gems/ruby-x.x.x@global/specifications/default mv psych-3.0.2 ../

希望这对某人有帮助!


0

在Snow Leopard上,Catharz的解决方案对我不起作用。但是,此解决方案做到了:

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

(重新安装rvm给了我有关clang没有选项“ --with-libyaml”的警告,但是无论如何它都解决了错误消息。)


0

这至少在Ubuntu 10.04上对我有用

$ sudo apt-get安装libtool

$ rvm重新安装1.9.3


0

在Solaris上:

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

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


关于os x的问题。
zishe 2014年

0

当我在Snow Leopard 10.6.8上从64位切换到32位时,我已经重新安装了ruby(使用rvm)以在32bit上运行,并遇到了相同的问题。因此,我只是“清理” rvm之前缓存的所有内容并解决问题。希望此技巧可以帮助某人。

rvm全部清除

rvm install ruby​​_version_here //(这样,rvm还将重新下载最新的Yaml)。

顺便说一句,如果您仍然遇到此问题,我想您可以尝试:

宝石安装心理

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.