【问题标题】:how to solve "ruby installation is missing psych" error?如何解决“ruby 安装缺少心理”错误?
【发布时间】: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

标签: ruby-on-rails ruby macos rvm


【解决方案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 stackoverflow.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

                        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/,}脚本/函数/管理/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 是首先导致错误的原因(对我而言)。
                                      猜你喜欢
                                      • 2012-10-04
                                      • 1970-01-01
                                      • 2021-10-18
                                      • 2016-06-24
                                      • 2021-05-27
                                      • 1970-01-01
                                      • 1970-01-01
                                      • 1970-01-01
                                      • 2020-02-05
                                      相关资源
                                      最近更新 更多