como resolver um erro de “instalação ruby ​​está faltando psych”?

158

Eu usei o rvm para instalar o ruby ​​1.9.3. apesar de ter sido instalado com sucesso, reclamou da libyaml. e agora toda vez que eu quero instalar uma gema (digamos trilhos), esse aviso aparece:

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

Eu uso o Mac os X 10.7 (Lion).

Pouya
fonte
Você tentou instalar o libyaml seguindo estas instruções: pyyaml.org/wiki/LibYAML ?
sailor
1
Você está usando homebrew? Tente brew doctor. Ele lista um problema com o link libyaml?
Stoutie
3
Usuários de Mac: rm -rf /usr/local/lib/ruby/gems/ && brew reinstall rubycomo indicado no oficial homebrew-core Gtihub resolvido problema
Travis Clarke

Respostas:

218

No meu caso

rvm pkg install libyaml

e

rvm reinstall ruby-1.9.3-p125

resolveu o problema.

Para pessoas que usam o Ubuntu, verifique se ele libtoolestá instalado antes das etapas acima:

sudo apt-get install libtool

Para usuários do macOS (com homebrew):

rm -rf /usr/local/lib/ruby/gems/ && brew reinstall ruby
peterpengnz
fonte
11
Você realmente quis dizer:rvm package install libyaml
johncblandii
3
Não, ele quis dizer rvm pkg install libyaml. De rvm usage: pkg :: Install a dependency package {readline,iconv,zlib,openssl}.
Jordanpg
Eu acho que depende de qual versão do rvm você usa. No rvm 1.6.9 é package.
Vanuan 26/07/12
8
Após a execução rvm pkg install libyaml, recomenda-se reinstalar todos os rubis com rvm reinstall all --force. Pode ser útil se você tiver mais de um.
Haralan Dobrev 10/11/12
7
Tinha que fazer o rvm reinstall 1.9.3 --with-libyaml-dir=/home/rails/.rvm/usrque foi sugerido em serverfault.com/questions/442150/…
pcv
20

para ubuntu e rvm

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

trabalhou

Gizmomogwai
fonte
1
Eu tive que 'rvm desinstalar tudo' antes de instalar o libyaml. Essa é a única maneira que o erro foi resolvido
Sunil Gowda
19

Se não estiver usando o rvm, mas você estiver construindo e instalando o ruby ​​1.9.3 a partir do zero - por exemplo, você está gerenciando suas versões do ruby ​​com rbenv - você deve instalar o libyaml primeiro. Obtenha em http://pyyaml.org/ ; no momento, o arquivo que você deseja é http://pyyaml.org/download/libyaml/yaml-0.1.4.tar.gz . Abra o tarball e cd na pasta resultante. Então:

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

Agora você está pronto para construir o ruby. Faça o download do ruby ​​em http://ftp.ruby-lang.org/pub/ruby/ . Abra o tarball e cd na pasta resultante. Agora:

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

(Ou possivelmente sudo make install, dependendo de onde você o está colocando.) Se estiver usando o rbenv, você saberá que funcionou se alternar para rbenv global 1.9.3-p194(ou como quer que sua versão seja chamada) e gem --versionfuncionar sem aviso. Isso funcionou para mim no Mac OS X 10.6.8. ( Atualização : eu apenas tentei isso no Mac OS X 10.8.1 e parece que também funcionou bem.)

mate
fonte
o que deveria gem --version output? Eu instalei o Ruby 1.9.3-p327, mas gem --version produz 1.8.23 (não tenho certeza se isso está relacionado) e quando eu faço a atualização do pacote, estranhamente diz que algumas gemas estão exigindo => 1.9.2 stackoverflow.com/questions/ 14116083 /…
Leahcim 02/01
seus gem --versionsons corrigir, mas talvez você tem o seu caminho munged por causa do uso anterior de rvm
mate
4
E se você deve instalar yaml sem sudo, especifique um prefixo diferente /usr/localao configurar yaml, então rubi configure com--with-opt-dir=/path/to/yaml/prefix --with-yaml --prefix=/path/to/ruby/prefix
Chadwick
Eu sei que isso tem mais de um ano, mas a pergunta era sobre um erro no RVM. Como poderia ser apropriado começar com "Se não estiver usando o rvm"?
Peter Degen-Portnoy
18
brew install libyaml
rvm reinstall 1.9.3

É o que funcionou para mim (no Snow Leopard).

Catharz
fonte
Eu tive que fazer isso também. Instalação do rvm pkg O libyaml não fez isso por mim.
precisa saber é o seguinte
9

No meu caso, a solução foi adicionar a psychgema ao Gemfile.

Vanuan
fonte
6

Eu tive esse problema. libyaml não compilaria. Acontece que eu estava sentindo falta do libtool.

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

Isso resolveu meu problema.

AKWF
fonte
1
Nenhum pacote libtool disponível. Nada para fazer.
Paul
1
O centos não pode instalar o libtool? não acredito .. você está usando um sistema não-redhat e precisa apt-get?
phil88530
@ phil88530 versão antiga do CentOS pode ser mais estúpido do que você pensa
Dennis C
@DennisCheung oh ok, nunca jogou com um velho
phil88530
6

Se você instalou o ruby ​​no macOS com homebrew, tente esta solução .

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

Note que isso irá livrar-se de todas as gemas instaladas. É melhor salvar uma lista de gemas instaladas gem listantes de executar isso.

orkoden
fonte
Mas gem listé o que causa o erro em primeiro lugar (para mim).
Orome 03/10/19
5
$ brew doctor
$ brew link libyaml
faixa
fonte
A resolução de todos os brew doctorproblemas o corrigiu para mim. Eu recebi um erro muito semelhante ao erro do interlocutor enquanto tentava gem install jekyll. Todos os comandos através do rvm também estavam dando erros. O problema subjacente e não tão óbvio é que o homebrew, estou assumindo os meios pelos quais o rvm instala coisas, estava tendo problemas. Eu havia atualizado recentemente para o Mavericks no Mac OS. No meu caso, resolver todos os brew doctorproblemas eliminou todas as mensagens de erro. Agora tudo está funcionando sem problemas.
Stoutie
4

Consertei isso finalmente. O problema era que, embora eu instalei o libyaml com o brew, ele nunca foi vinculado. Eu tive que remover um arquivo de cabeçalho conflitante e depois brew link libyaml.

Michael
fonte
4

Instalando o ruby ​​com o rvm para mac osx, use autolibs para instalar o libyaml e primeiro desinstalar o libyaml ajuda.

Isso funcionou para mim:

brew uninstall libyaml
rvm autolibs enable
rvm reinstall ruby-2.1.1
user33302
fonte
Obrigado @ user33302. A solução acima também funcionou para mim no Mac OS EI CAPITON.
Sandeep Ahuja
3

Eu tive o mesmo problema (Lion 10.7.4) e o corrigi atualizando o rvm e reinstalando o ruby

1) atualize o rvm https://rvm.io//rvm/install/

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

2) Em seguida, use o rvm para reinstalar o ruby ​​1.9.3 (que havia sido instalado anteriormente com a versão anterior do rvm)

rvm reinstall 1.9.3
user761552
fonte
3

Reinstalei o ruby ​​1.9.3 com o suporte libyaml:

rvm reinstall 1.9.3 --with-libyaml

Eu me certifiquei de usar o 1.9.3 antes de instalar o psych:

rvm use 1.9.3

Eu instalei psych:

gem install psych
adamo
fonte
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

recarregue seu .rvmrc (saída de CD, entrada de CD)

bundle
vysogot
fonte
2

Nenhuma dessas respostas funcionou para mim.

Encontrei minha resposta em https://github.com/sstephenson/ruby-build/issues/119 Estou na máquina virtual Centos 6.3.

Você DEVE instalar o libyaml antes de instalar o ruby. Se você já instalou o ruby, você deve se livrar dos arquivos antes de compilar o código fonte novamente !!!

# 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
chemoish
fonte
2

Criei os arquivos libyaml separadamente da fonte e os instalei em / usr / local / lib. O ruby ​​que o RVM criou ainda não os viu e, em vez de mexer com o makefile ou o sistema LD_LIBRARY_PATH, eu apenas copiei / usr / local / lib / libyaml * para ~ / .rvm / rubies / ruby-1.9.3-p327 / lib /

Isso acalmou o aviso.

Dave Hildebrandt
fonte
2

Isto é o que funcionou para mim no Ubuntu:
- instalando o libyaml-dev (sudo apt-get install libyaml-dev)
- instalando o rvm + ruby ​​1.9.3

Luc
fonte
2

Tentei todas essas respostas e ainda não consegui fazê-lo funcionar. Instalei o libyaml com homebrew e depois instalei o Ruby 1.9.3 e 2.0.0 com o rvm. Cada vez queixava-me que estava sentindo falta do psych (libyaml). Mas tentar instalar o libyaml me disse que ele já estava instalado. Enxágue, repita. Urgh.

Finalmente, o que fiz foi desinstalar o libyaml. Então eu habilitado autolibs em rvm , que (pelo menos no OSX) permite rvm de instalar e gerenciar dependências mais diretamente. Agora, quando instalei o Rubies, o rvm conseguiu instalar o libyaml e reconheceu que estava no lugar certo.

Portanto, se você já tentou todas as outras opções, tente remover o libyaml e depois instalar o Rubies. É intuitivo em relação às mensagens de erro, mas foi o que finalmente funcionou para mim.

Bob Ralian
fonte
Você não precisa libyaml: você precisa libyaml-dev, que é o que RVM instalações para você com --autolibs
Confusão
1

Eu tive o mesmo problema ( Cent OS 5.7 ), nenhuma das soluções acima funcionou para mim.

// 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.

Depois de fazer várias reinstalações, percebi que ele estava procurando por yaml na versão ruby ​​em 1.9.1vez de 1.9.3. Então eu desclassifiquei

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

E funcionou 8D!

Ish
fonte
1

No CentOS 6.3, nenhuma das opções acima funcionou. No entanto, instalar o libyaml a partir do código-fonte antes de instalar o ruby ​​resolveu o problema.

$ 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

e depois

rvm install 1.9.3
gem install rails
Dmitry G.
fonte
1

estou a usar

rvm 1.16.20 (versão) por Wayne E. Seguin, Michal Papis [https://rvm.io/]

e também obteve o seguinte erro durante a instalação do pacote

.rvm / rubies / ruby-1.9.3-p194 / lib / ruby ​​/ 1.9.1 / yaml.rb: 56: in ``: Parece que sua instalação do ruby ​​está faltando psych (para saída YAML). Para eliminar esse aviso, instale o libyaml e reinstale o seu ruby.

Aqui estão três maneiras diferentes de resolver esse erro sem precisar instalar o psych

  1. exportar LD_LIBRARY_PATH = / usr / local / lib
  2. altere /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. Corrija a instalação do rvm ruby ​​1.9.3 via

    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 / funções / 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 ****
              # quando o parente estiver em vigor, o libyaml é instalado no próprio ruby, para que seja movido com o 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"]]
    ! __rvm_update_configure_env LDFLAGS = "- L $ {rvm_rubies_path} / $ {rvm_ruby_string} / lib64"
              fi
            outro
              libyaml_installed || libyaml # Instala libyaml

    ! __rvm_update_configure_env CFLAGS = "- $ {rvm_path} / usr / include"
    ! __rvm_update_configure_env LDFLAGS = "- L $ {caminho do rvm} / usr / lib"
              se [[-d "$ {rvm_path} / usr / lib64"]]
    ! __rvm_update_configure_env LDFLAGS = "- L $ {caminho do rvm} / usr / lib64"
              fi
            fi

    --- 106.123 ----
              # quando o parente estiver em vigor, o libyaml é instalado no próprio ruby, para que seja movido com o ruby
              prefix_path = "$ {rvm_rubies_path} / $ {rvm_ruby_string}" libyaml

    ! __rvm_update_configure_env CFLAGS = "- I $ {rvm_rubies_path} / $ {rvm_ruby_string} / inclua $ {CFLAGS}"
    ! __rvm_update_configure_env LDFLAGS = "- L $ {rvm_rubies_path} / $ {rvm_ruby_string} / lib $ {LDFLAGS}"
              if [[-d "$ {rvm_rubies_path} / $ {rvm_ruby_string} / lib64"]]
    ! __rvm_update_configure_env LDFLAGS = "- L $ {rvm_rubies_path} / $ {rvm_ruby_string} / lib64 $ {LDFLAGS}"
              fi
            outro
              libyaml_installed || libyaml # Instala libyaml

    ! __rvm_update_configure_env CFLAGS = "- $ {rvm_path} / usr / include $ {CFLAGS}"
    ! __rvm_update_configure_env LDFLAGS = "- L $ {caminho_ rvm} / usr / lib $ {LDFLAGS}"
              se [[-d "$ {rvm_path} / usr / lib64"]]
    ! __rvm_update_configure_env LDFLAGS = "- L $ {caminho_ rvm} / usr / lib64 $ {LDFLAGS}"
              fi
            fi

victorv
fonte
Confirmei que este patch não é necessário se você estiver usando a última versão estável rvm 1.18.4
victorv
1

Também lutei com as mesmas falhas rvm install ruby-2.0.0por muitas, MUITAS horas. Eu tentei todos os métodos diferentes para instalar o libyaml; wget source, yumE rvm. Eu também tentei todas as diferentes abordagens listadas em threads semelhantes. Como tentei todos os métodos diferentes, eu tinha várias instalações e locais do libyaml.

O RVM é perfeitamente capaz de instalar as dependências necessárias no ~/.rvm. Simplesmente remover os arquivos libyaml da instalação não-RVM corrigiu esse problema para mim:

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

rvm reinstall ruby-2.0.0-p0

Trabalho!

Andrejs R.
fonte
1

Método de instalação em ruby ​​NÃO-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"

Desabilite o rpmforge editando este arquivo e configure 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  

O libyaml-devel é a chave.

% 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

Atualize seu caminho e origem .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

Defina seu GEM_HOME em .cshrc e source

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

% gem install mysql2 pg ruby-debug-ide rails capistrano capistrano-ext passenger
Francis Trujillo
fonte
1

Se você estiver construindo ruby ​​a partir do código-fonte (eu construí o 1.9.3 no Fedora 20), você precisará disso antes de fazer o configure / make para construir o ruby:

yum install libyaml-devel

(além do yum, instale o libyaml.) Semelhante à resposta de Francis usando o rpmforge acima.

Don Law
fonte
Também confirmado no Centos 5.6
marcovtwout
1

Eu estava tendo esse erro e percebi que havia versões diferentes do Ruby instaladas no HomeBrew, além de muitas gemas que eu não usava mais. Então, fez uma limpeza completa como esta:

$ 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

Se você não usar um Gemfile, verifique se você sabe quais jóias devem ser reinstaladas.

Eneko Alonso
fonte
1

No meu caso, tudo o que eu precisava fazer era

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

Agora, o FWIW, gem listinclui

psych (2.2.4, default: 2.2.2)
orome
fonte
Estou no macOS Sierra, e isso funcionou para mim. É a mesma solução relatada neste problema do GitHub aqui. Tente esta solução primeiro, pois é muito mais simples e menos drástica do que as outras nesta página.
mljrg
1
  • Ubuntu
  • Usando RVM
  • Razão: versões conflitantes da gema Psych entre ruby ​​2.4.4 e ruby ​​2.5.1

Passei algumas horas tentando fazer com que meu erro desaparecesse e nenhuma das respostas aqui se adequasse ao meu caso, então pensei em postar como o resolvi ...

No meu caso, quando eu corri gem list | grep psych, eu tinha o seguinte resultado: psych(default: 3.1.0, default: 3.0.2).

Aparentemente, desde a versão 2.5.0, o ruby ​​depende da versão mais recente do psych (3.1.0) e ter ambos definidos como padrão estava atrapalhando tudo. Observe que eu nunca acabei descobrindo por que as duas foram definidas como padrão - eu limpei completamente as versões rvm e ruby ​​do meu computador devido a isso.

Portanto, para evitar que a versão mais antiga (3.0.2) seja definida como padrão, vá para ~/.rvm/gems/ruby-x.x.x@global/specifications/default. Se você executar, ls | grep psychele retornará as duas versões da gema aqui. Se você deseja manter o 3.1.0 como padrão, basta executar mv psych-3.0.2.gemspec ../e tente executar gemlistpara garantir que ele esteja listando apenas uma versão como padrão agora ...

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

Espero que isso ajude alguém!

vicentesantos
fonte
0

No Snow Leopard, a solução da Catharz não funcionou para mim. Esta solução, no entanto, fez:

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

(A reinstalação do rvm me deu um aviso sobre o clang não ter a opção "--with-libyaml", mas resolveu a mensagem de erro independentemente.)

mrrena
fonte
0

Isso funcionou para mim pelo menos no Ubuntu 10.04

$ sudo apt-get install libtool

$ rvm reinstalar 1.9.3

Abhay PS
fonte
0

No Solaris:

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

para adicionar /usr/local/libao caminho de pesquisa da biblioteca compartilhada (consulte man crle)

edx
fonte
Esta pergunta sobre os x.
Zishe
0

Quando mudei de 64 bits para 32 bits no Snow Leopard 10.6.8, reinstalei o ruby ​​(usado rvm) para executar em 32 bits e encontrei o mesmo problema. Então, eu apenas 'limpo' tudo o que foi armazenado em cache pelo rvm antes e os problemas foram resolvidos. Espero que esta dica possa ajudar alguém.

limpeza rvm tudo

rvm install ruby_version_here // (Dessa forma, o rvm também baixará novamente o yaml mais recente).

BTW, se você ainda encontrar esse problema, acho que você pode tentar:

instalar gema psych

anguu
fonte