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

时间:2012-02-24 16:06:59

标签: ruby-on-rails ruby macos rvm

我使用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)。

33 个答案:

答案 0 :(得分:217)

就我而言

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

答案 1 :(得分:20)

表示ubuntu和rvm

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

工作

答案 2 :(得分:19)

如果不使用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没有任何警告。这对我在Mac OS X 10.6.8上有用。 (更新:我刚刚在Mac OS X 10.8.1上试过这个,但它似乎也在那里工作得很好。)

答案 3 :(得分:16)

brew install libyaml
rvm reinstall 1.9.3

对我有用(雪豹)。

答案 4 :(得分:9)

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

答案 5 :(得分:6)

我有这个问题。 libyaml不会编译。事实证明我错过了libtool。

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

这解决了我的问题。

答案 6 :(得分:5)

$ brew doctor
$ brew link libyaml

答案 7 :(得分:4)

我终于解决了这个问题。问题是即使我用brew安装了libyaml,它也从未被链接过。我不得不删除有冲突的头文件,然后删除brew link libyaml

答案 8 :(得分:3)

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

这对我有用:

brew uninstall libyaml
rvm autolibs enable
rvm reinstall ruby-2.1.1

答案 9 :(得分: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

答案 10 :(得分:2)

这对我在Ubuntu上的作用是什么:
- 安装libyaml-dev(sudo apt-get install libyaml-dev)
- 安装rvm + ruby​​ 1.9.3

答案 11 :(得分:2)

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

rvm reinstall 1.9.3 --with-libyaml

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

rvm use 1.9.3

我安装了心理:

gem install psych

答案 12 :(得分:2)

我尝试了所有这些答案,仍然无法使其正常运行。我用自制软件安装了libyaml,然后用rvm安装了Ruby 1.9.3和2.0.0。每次它抱怨我失去了心理(libyaml)。但是尝试安装libyaml告诉我它已经安装好了。冲洗,重复。 Urgh。

最后,我所做的是 uninstall libyaml。然后我enabled autolibs in rvm,(至少在OSX中)允许rvm更直接地安装和管理依赖项。现在当我安装Rubies时,rvm能够安装libyaml并认识到它位于正确的位置。

因此,如果您已经尝试了所有其他选项,请尝试删除 libyaml然后安装您的Rubies。从错误信息中可以直观地了解,但这最终对我有用。

答案 13 :(得分: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 out,cd in)

bundle

答案 14 :(得分:2)

我从源代码中单独构建了libyaml文件,并将它们安装在/ usr / local / lib中。 RVM创建的ruby仍然没有看到它们,而不是使用makefile或系统LD_LIBRARY_PATH,我只是将/ usr / local / lib / libyaml *复制到〜/ .rvm / rubies / ruby​​-1.9.3-p327 / LIB /

这使警告安静下来。

答案 15 :(得分: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

答案 16 :(得分: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

答案 17 :(得分:1)

我正在使用

  Wayne E. Seguin的rvm 1.16.20(版本),   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. 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
    
  4.     $ 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
    
    

答案 18 :(得分:1)

  • Ubuntu
  • 使用RVM
  • 原因:红宝石2.4.4和红宝石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,以确保它现在仅列出一个版本作为默认值...

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

希望这对某人有帮助!

答案 19 :(得分:1)

在我的情况下,all I needed to do

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)

答案 20 :(得分:1)

我遇到了这个错误并注意到我使用HomeBrew安装了不同版本的Ruby,以及我不再使用的许多宝石。所以做了这样的全面清理:

$ 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,请确保知道要重新安装哪些宝石。

答案 21 :(得分: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.

在重新安装几次之后,我意识到它正在寻找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!

答案 22 :(得分:1)

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

通过编辑此文件并设置enabled = 0来禁用rpmforge     %sudo vi /etc/yum.repos.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  

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

答案 23 :(得分:1)

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

yum install libyaml-devel

(除了yum install libyaml。)类似于Francis在上面使用rpmforge的回答。

答案 24 :(得分:0)

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

我做了什么:

  1. sudo port install ruby26
  2. sudo port select --set ruby ruby26(这实际上使macOS默认的ruby安装退出了游戏)
  3. ~/.gem/ruby/2.6.0/gems中删除了所有在调用gem命令时引起错误的宝石
  4. 为宝石列表中列出的所有宝石运行gem pristine命令(确切的命令是警告的一部分)
  5. 最后gem update --user-install

答案 25 :(得分:0)

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

答案 26 :(得分:0)

我在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*

found here

答案 27 :(得分:0)

在Snow Leopard上,Catharz的解决方案对我不起作用。然而,这个解决方案确实:

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

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

答案 28 :(得分:0)

至少在Ubuntu 10.04上这对我有用

$ sudo apt-get install libtool

$ rvm重新安装1.9.3

答案 29 :(得分:0)

在Solaris上:

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

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

答案 30 :(得分:0)

我和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

作品!

答案 31 :(得分:0)

对于使用Mountain Lion和RVM版本&gt; = 1.18.x

的用户

RVM附带了这个新工具,在安装ruby版本时用作标志。它被称为autolibs。

我通过以下方式解决了这个心理问题:

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

通过以下方式阅读帮助文本:

rvm help autolibs

冷却。

答案 32 :(得分:0)

当我在Snow Leopard 10.6.8上从64位切换到32位时,我重新安装了ruby(使用rvm)以在32位上运行并遇到了同样的问题。所以我只是'清理'之前由rvm缓存的所有东西,问题就解决了。希望这个提示可以帮助别人。

  

rvm cleanup all

     

rvm install ruby​​_version_here //(这样,rvm也会重新下载最新的yaml)。

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

  宝石安装心理