如何解决“ruby 安装缺少心理”错误?

Posted

技术标签:

【中文标题】如何解决“ruby 安装缺少心理”错误?【英文标题】:how to solve "ruby installation is missing psych" error? 【发布时间】:2012-03-15 02:16:58 【问题描述】:

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

【问题讨论】:

您是否尝试按照以下说明安装 libyaml:pyyaml.org/wiki/LibYAML? 你在使用自制软件吗?试试brew doctor。它是否列出了 libyaml 链接的问题? Mac 用户:rm -rf /usr/local/lib/ruby/gems/ && brew reinstall ruby 如官方所述homebrew-core Gtihub 已解决issue 【参考方案1】:
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

【讨论】:

【参考方案2】:

就我而言

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

【讨论】:

你的意思是:rvm package install libyaml 不,他的意思是rvm pkg install libyaml。来自rvm usagepkg :: Install a dependency package readline,iconv,zlib,openssl 我认为这取决于您使用的 rvm 版本。在 rvm 1.6.9 中是package 运行rvm pkg install libyaml 后,建议使用rvm reinstall all --force 重新安装所有红宝石。如果您有多个,它可能会很有用。 必须按照serverfault.com/questions/442150/… 中的建议执行rvm reinstall 1.9.3 --with-libyaml-dir=/home/rails/.rvm/usr【参考方案3】:

我遇到了这个问题。 libyaml 不会编译。原来我错过了 libtool。

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

这解决了我的问题。

【讨论】:

没有可用的软件包 libtool。无事可做。 centos 不能yum 安装libtool?不相信.. 你使用的是非基于 redhat 的系统并且需要 apt-get 吗? @phil88530 旧版 CentOS 可能比你想象的更愚蠢 @DennisCheung 哦,好吧,从来没有和旧的玩过【参考方案4】:

适用于 ubuntu 和 rvm

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

工作

【讨论】:

在安装 libyaml 之前,我必须“全部卸载 rvm”。这是清除错误的唯一方法【参考方案5】:
brew install libyaml
rvm reinstall 1.9.3

对我有用(在雪豹上)。

【讨论】:

我也必须这样做。 rvm pkg install libyaml 不是为我做的。【参考方案6】:

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

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

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

【讨论】:

【参考方案7】:

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

【讨论】:

【参考方案8】:

这至少在 Ubuntu 10.04 上对我有用

$ sudo apt-get install libtool

$ rvm 重新安装 1.9.3

【讨论】:

【参考方案9】:

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

【讨论】:

【参考方案10】:

如果不使用 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 上尝试过,它似乎在那里也运行良好。)

【讨论】:

gem --version 应该输出什么?我安装了 Ruby 1.9.3-p327 但 gem --version 输出 1.8.23 (不确定这是否相关),当我进行捆绑更新时,奇怪的是有些 gem 需要 => 1.9.2 ***.com/questions/14116083/… 你的 gem --version 听起来是对的,但也许你的路径因为以前使用 rvm 而被修改了 而如果必须安装yaml不带sudo,配置yaml时指定/usr/local以外的前缀,然后用--with-opt-dir=/path/to/yaml/prefix --with-yaml --prefix=/path/to/ruby/prefix配置ruby 我知道这已经有一年多了,但问题是关于 RVM 的错误。以“如果不使用 rvm”开头怎么可能合适?【参考方案11】:

这些答案都不适合我。

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

【讨论】:

【参考方案12】:

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

【讨论】:

【参考方案13】:

在 Solaris 上:

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

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

【讨论】:

这个关于os x的问题。【参考方案14】:

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

这消除了警告。

【讨论】:

【参考方案15】:

在 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

【讨论】:

【参考方案16】:

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

rvm 清理所有

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

BTW,如果你还是遇到这个问题,我想你可以试试:

gem 安装心理

【讨论】:

【参考方案17】:

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

【讨论】:

【参考方案18】:

我正在使用

rvm 1.16.20 (version) by Wayne E. Seguin , 米哈尔·帕皮斯 [https://rvm.io/]

在安装包的过程中也出现以下错误

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

这里有三种不同的方法来解决这个错误,而无需 gem install psych

    导出 LD_LIBRARY_PATH=/usr/local/lib

    改变/etc/ld.so.conf

    sudo su - root
    echo /usr/local/lib64 >> /etc/ld.so.conf
    echo /usr/local/lib >> /etc/ld.so.conf
    ldconfig
    

    修复 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/,脚本/函数/管理/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 *** # 当 relative 生效时 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 ---- # 当 relative 生效时 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,则不需要此补丁【参考方案19】:

对于那些使用 Mountain Lion 和 RVM 版本 >= 1.18.x

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

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

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

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

rvm help autolibs

酷。

【讨论】:

【参考方案20】:

我也为同样的失败与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

有效!

【讨论】:

【参考方案21】:

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

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

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

【讨论】:

你不需要 libyaml:你需要 libyaml-dev,这是 rvm 使用 --autolibs 为你安装的【参考方案22】:
$ brew doctor
$ brew link libyaml

【讨论】:

为我解决了所有brew doctor 问题。我在尝试gem install jekyll 时遇到了一个与提问者的错误非常相似的错误。通过 rvm 的所有命令也都给出了错误。潜在且不那么明显的问题是自制软件,我假设 rvm 安装东西的方式有问题。我最近在 Mac OS 上升级到 Mavericks。就我而言,解决所有brew doctor 问题消除了每条错误消息。现在一切顺利。【参考方案23】:

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

rvm reinstall 1.9.3 --with-libyaml

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

rvm use 1.9.3

我安装了心理:

gem install psych

【讨论】:

【参考方案24】:

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"

通过编辑此文件禁用 rpmforge 并设置 enabled=0 % 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 和 source 中设置你的 GEM_HOME

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

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

【讨论】:

【参考方案25】:

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

【讨论】:

【参考方案26】:

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

这对我有用:

brew uninstall libyaml
rvm autolibs enable
rvm reinstall ruby-2.1.1

【讨论】:

谢谢@user33302。上述解决方案也适用于 Mac OS EI CAPITON。【参考方案27】:

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

【讨论】:

【参考方案28】:

如果您从源代码构建 ruby​​(我在 Fedora 20 上构建了 1.9.3),则在执行 configure/make 构建 ruby​​ 之前需要此:

yum install libyaml-devel

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

【讨论】:

也在 Centos 5.6 上确认【参考方案29】:
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

【讨论】:

【参考方案30】:

如果您在 macOS 上使用自制软件安装了 ruby​​,try this solution。

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

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

【讨论】:

但是gem list 是首先导致错误的原因(对我而言)。

以上是关于如何解决“ruby 安装缺少心理”错误?的主要内容,如果未能解决你的问题,请参考以下文章

"SQL SERVER,错误:207" 如何解决

c#Ajax 的错误,应该如何解决?

如何解决子重复错误?

如何解决“错误:输入中的语法错误(1)。”

如何解决此分段错误:以下代码的 11 错误?

RichEmbed 未定义错误如何解决