jak rozwiązać błąd „brakuje instalacji ruby ​​psych”?


158

Użyłem rvm do zainstalowania Rubiego 1.9.3. mimo że został pomyślnie zainstalowany, narzekał na libijaml. a teraz za każdym razem, gdy chcę zainstalować klejnot (powiedzmy rails), pojawia się to ostrzeżenie:

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

Używam Mac OS X 10.7 (Lion).


Czy próbowałeś zainstalować libyaml, postępując zgodnie z następującymi instrukcjami: pyyaml.org/wiki/LibYAML ?
żeglarz

1
Czy używasz homebrew? Spróbuj brew doctor. Czy zawiera problem z linkiem libijaml?
Stoutie

3
Użytkownicy komputerów Mac: rm -rf /usr/local/lib/ruby/gems/ && brew reinstall rubyjak stwierdzono w oficjalnym homebrew-core Gtihub rozwiązany problem
Travis Clarke

Odpowiedzi:


218

W moim przypadku

rvm pkg install libyaml

i

rvm reinstall ruby-1.9.3-p125

Rozwiązać problem.

W przypadku osób korzystających z Ubuntu upewnij się, że libtooljest zainstalowany przed wykonaniem powyższych kroków:

sudo apt-get install libtool

Dla użytkowników macOS (z homebrew):

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

11
Masz na myśli:rvm package install libyaml
johncblandii

3
Nie, miał na myśli rvm pkg install libyaml. Od rvm usage: pkg :: Install a dependency package {readline,iconv,zlib,openssl}.
jordanpg

Myślę, że to zależy od używanej wersji rvm. W rvm 1.6.9 to jest package.
Vanuan,

8
Po uruchomieniu rvm pkg install libyamlzaleca ponowne zainstalowanie wszystkich rubinów z rvm reinstall all --force. Może być przydatne, jeśli masz więcej niż jeden.
Haralan Dobrev

7
Musiałem zrobić to, rvm reinstall 1.9.3 --with-libyaml-dir=/home/rails/.rvm/usrco sugerowano w serverfault.com/questions/442150/…
pcv

20

dla ubuntu i rvm

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

pracował


1
Musiałem „rvm uninstall all” przed zainstalowaniem libijaml. Tylko w ten sposób błąd zniknął
Sunil Gowda

19

Jeśli nie używasz rvm, ale raczej budujesz i instalujesz Ruby 1.9.3 od zera - na przykład zarządzasz swoimi wersjami Ruby za pomocą rbenv - musisz najpierw zainstalować libyaml. Pobierz go z http://pyyaml.org/ ; w tej chwili żądany plik to http://pyyaml.org/download/libyaml/yaml-0.1.4.tar.gz . Otwórz archiwum tar i cd do powstałego folderu. Następnie:

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

Jesteś teraz gotowy do budowy rubinu. Pobierz ruby ​​z http://ftp.ruby-lang.org/pub/ruby/ . Otwórz archiwum tar i cd do powstałego folderu. Teraz:

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

(Lub ewentualnie sudo make install, w zależności od tego, gdzie go umieścisz.) Jeśli używasz rbenv, będziesz wiedział, że zadziałało, jeśli przełączysz się na rbenv global 1.9.3-p194(lub jakkolwiek nazywa się twoja wersja) i gem --versiondziała bez ostrzeżenia. To zadziałało dla mnie w systemie Mac OS X 10.6.8. ( Aktualizacja : właśnie wypróbowałem to w systemie Mac OS X 10.8.1 i wydaje się, że tam też działa dobrze).


co gem --version powinno wyświetlać? Zainstalowałem Ruby 1.9.3-p327, ale gem --version wyświetla 1.8.23 (nie jestem pewien, czy to jest powiązane), a kiedy aktualizuję pakiet, dziwnie mówi, że niektóre klejnoty wymagają => 1.9.2 stackoverflow.com/questions/ 14116083 /…
Leahcim

Twoje gem --versiondźwięki są poprawne, ale może masz utrudnioną ścieżkę z powodu poprzedniego użycia rvm
Matt

4
A jeśli musisz zainstalować yaml bez sudo, podaj prefiks inny niż /usr/localpodczas konfigurowania yamla, a następnie skonfiguruj ruby ​​z--with-opt-dir=/path/to/yaml/prefix --with-yaml --prefix=/path/to/ruby/prefix
Chadwick

Wiem, że to ma ponad rok, ale pytanie dotyczyło błędu w RVM. Jak mogłoby być właściwe rozpoczęcie od „Jeśli nie używasz rvm”?
Peter Degen-Portnoy

18
brew install libyaml
rvm reinstall 1.9.3

To, co zadziałało dla mnie (w Snow Leopard).


Ja też musiałem to zrobić. rvm pkg install libyaml nie zrobił tego za mnie.
stringo0

9

W moim przypadku rozwiązaniem było dodanie psychklejnotu do pliku Gemfile.


6

Miałem ten problem. libyaml się nie kompiluje. Okazuje się, że brakowało mi libtool.

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

To rozwiązało mój problem.


1
Brak dostępnego pakietu libtool. Nic do roboty.
Paul

1
centos nie może yum zainstalować libtool? nie wierz w to ... czy używasz systemu nie opartego na redhat i potrzebujesz apt-get?
phil88530

@ phil88530 Stara wersja CentOS może być głupsza niż myślisz
Dennis C

@DennisCheung oh ok, nigdy nie grałem ze starym
phil88530

6

Jeśli zainstalowałeś Ruby na macOS z homebrew, wypróbuj to rozwiązanie .

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

Zwróć uwagę, że spowoduje to usunięcie wszystkich zainstalowanych klejnotów. Najlepiej zapisz listę zainstalowanych klejnotów gem listprzed uruchomieniem tego.


Ale gem listto, co powoduje błąd w pierwszej kolejności (dla mnie).
orome

5
$ brew doctor
$ brew link libyaml

Rozwiązanie wszystkich brew doctorproblemów rozwiązało to za mnie. Otrzymałem błąd bardzo podobny do błędu pytającego podczas próby gem install jekyll. Wszystkie polecenia przez rvm również zawierały błędy. Podstawowym i nie tak oczywistym problemem jest to, że homebrew, zakładam, że sposób, w jaki rvm instaluje rzeczy, miał problemy. Niedawno zaktualizowałem do Mavericks w systemie Mac OS. W moim przypadku rozwiązanie wszystkich brew doctorproblemów wyeliminowało każdy komunikat o błędzie. Teraz wszystko działa sprawnie.
Stoutie

4

W końcu to naprawiłem. Problem polegał na tym, że mimo że zainstalowałem libyaml z naparem, nigdy nie został powiązany. Musiałem usunąć konfliktujący plik nagłówkowy, a następnie brew link libyaml.


4

Instalowanie Rubiego z rvm dla Mac OSX, użyj autolibów do zainstalowania libyaml i najpierw pomaga odinstalowanie libyaml.

To zadziałało dla mnie:

brew uninstall libyaml
rvm autolibs enable
rvm reinstall ruby-2.1.1

Dzięki @ user33302. Powyższe rozwiązanie działało również u mnie na Mac OS EI CAPITON.
Sandeep Ahuja

3

Miałem ten sam problem (Lion 10.7.4) i naprawiłem go, aktualizując rvm, a następnie ponownie instalując ruby

1) zaktualizuj rvm https://rvm.io//rvm/install/

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

2) Następnie użyj rvm, aby ponownie zainstalować Ruby 1.9.3 (który został wcześniej zainstalowany z wcześniejszą wersją rvm)

rvm reinstall 1.9.3

3

Ponownie zainstalowałem Ruby 1.9.3 z obsługą libijaml:

rvm reinstall 1.9.3 --with-libyaml

Upewniłem się, że użyję 1.9.3 przed zainstalowaniem psych:

rvm use 1.9.3

Zainstalowałem psych:

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

przeładuj plik .rvmrc (wyjście cd, wejście cd)

bundle

2

Żadna z tych odpowiedzi nie zadziałała dla mnie.

Znalazłem moją odpowiedź na https://github.com/sstephenson/ruby-build/issues/119 Jestem na Centos 6.3 Virtual Machine.

MUSISZ zainstalować libyaml przed zainstalowaniem Rubiego. JEŚLI JUŻ zainstalowałeś Rubiego, musisz pozbyć się plików przed ponowną kompilacją źródeł !!!

# 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

Zbudowałem pliki libyaml niezależnie od źródła i zainstalowałem je w / usr / local / lib. Rubin, który utworzył RVM, nadal ich nie widział i zamiast zepsuć plik makefile lub system LD_LIBRARY_PATH właśnie skopiowałem / usr / local / lib / libyaml * do ~ / .rvm / rubies / ruby-1.9.3-p327 / lib /

To uciszyło ostrzeżenie.


2

Oto, co zadziałało na Ubuntu:
- instalacja libyaml-dev (sudo apt-get install libyaml-dev)
- instalacja rvm + ruby ​​1.9.3


2

Wypróbowałem wszystkie te odpowiedzi i nadal nie byłem w stanie go uruchomić. Zainstalowałem libyaml z homebrew, a następnie zainstalowałem Ruby 1.9.3 i 2.0.0 z rvm. Za każdym razem skarżył się, że brakuje mi psych (libijskiego). Ale próba zainstalowania libyaml powiedziała mi, że jest już zainstalowany. Spłucz, powtórz. Urgh.

W końcu odinstalowałem libyaml. Następnie włączyłem autolibs w rvm , co (przynajmniej w OSX) pozwala rvm na bardziej bezpośrednie instalowanie i zarządzanie zależnościami. Teraz, kiedy zainstalowałem Rubiego, rvm był w stanie zainstalować libyaml i rozpoznać, że jest we właściwym miejscu.

Więc jeśli wypróbowałeś wszystkie inne opcje, spróbuj faktycznie usunąć libyaml, a następnie zainstalować Rubiny. Na podstawie komunikatów o błędach jest to intuicyjne, ale to w końcu zadziałało.


Nie potrzebujesz libyaml: potrzebujesz libyaml-dev, czyli tego, co rvm instaluje za pomocą --autolibs
Confusion

1

Miałem ten sam problem ( Cent OS 5.7 ), żadne z powyższych rozwiązań nie zadziałało.

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

Po kilku ponownych instalacjach zdałem sobie sprawę, że szuka yamla w wersji ruby 1.9.1zamiast 1.9.3. Więc obniżyłem ocenę

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

I działało 8D!


1

W CentOS 6.3 żadne z powyższych nie działało. Jednak zainstalowanie libyaml ze źródeł przed zainstalowaniem Rubiego rozwiązało problem.

$ 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

i wtedy

rvm install 1.9.3
gem install rails

1

używam

rvm 1.16.20 (wersja) autorstwa Wayne E. Seguin, Michal Papis [https://rvm.io/]

a także wystąpił następujący błąd podczas instalacji pakietu

.rvm / rubies / ruby-1.9.3-p194 / lib / ruby ​​/ 1.9.1 / yaml.rb: 56: in ``: Wygląda na to, że w twojej instalacji ruby ​​brakuje psych (dla wyjścia YAML). Aby wyeliminować to ostrzeżenie, zainstaluj libyaml i ponownie zainstaluj ruby.

Oto trzy różne sposoby rozwiązania tego błędu bez konieczności instalowania oprogramowania gem install psych

  1. eksportuj 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. Napraw instalację rvm ruby ​​1.9.3 za pośrednictwem

    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 /,} skrypty / funkcje / 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 ****
              # kiedy relatywny jest aktywny, libijaml jest zainstalowany w samym rubinie, więc zostanie przeniesiony z rubinem
              prefix_path = "$ {rvm_rubies_path} / $ {rvm_ruby_string}" libijski

    ! __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"]]
    ! następnie __rvm_update_configure_env LDFLAGS = "- L $ {rvm_rubies_path} / $ {rvm_ruby_string} / lib64"
              fi
            jeszcze
              libyaml_installed || libyaml # Instaluje 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"]]
    ! następnie __rvm_update_configure_env LDFLAGS = "- L $ {rvm_path} / usr / lib64"
              fi
            fi

    --- 106,123 ----
              # kiedy relatywny jest aktywny, libijaml jest zainstalowany w samym rubinie, więc zostanie przeniesiony z rubinem
              prefix_path = "$ {rvm_rubies_path} / $ {rvm_ruby_string}" libijski

    ! __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"]]
    ! następnie __rvm_update_configure_env LDFLAGS = "- L $ {rvm_rubies_path} / $ {rvm_ruby_string} / lib64 $ {LDFLAGS}"
              fi
            jeszcze
              libyaml_installed || libyaml # Instaluje 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"]]
    ! następnie __rvm_update_configure_env LDFLAGS = "- L $ {rvm_path} / usr / lib64 $ {LDFLAGS}"
              fi
            fi


Potwierdziłem, że ta poprawka nie jest potrzebna, jeśli używasz najnowszej stabilnej wersji rvm 1.18.4
victorv

1

Ja też zmagałem się z tymi samymi porażkami rvm install ruby-2.0.0przez wiele, WIELE godzin. Próbowałem różnych metod instalacji libijamla; wget source, yumi rvm. Wypróbowałem również wszystkie różne podejścia wymienione w podobnych wątkach. Ponieważ wypróbowałem wszystkie różne metody, miałem wiele instalacji i lokalizacji libijamlu.

RVM jest w pełni zdolny do zainstalowania niezbędnych zależności w ~/.rvm. Po prostu usunięcie plików libyaml z instalacji innej niż RVM rozwiązało ten problem:

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

rvm reinstall ruby-2.0.0-p0

Pracuje!


1

Metoda instalacji 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"

WYŁĄCZ rpmforge, edytując ten plik i ustawiając włączony = 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  

Kluczem jest rozwój libijski.

% 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

Zaktualizuj ścieżkę i źródło .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

Ustaw swój GEM_HOME w .cshrc i source

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

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

1

Jeśli budujesz Ruby ze źródeł (zbudowałem 1.9.3 w Fedorze 20), będziesz potrzebować tego przed wykonaniem konfiguracji / make, aby zbudować ruby:

yum install libyaml-devel

(oprócz yum install libyaml.) Podobny do odpowiedzi Francisa używającej rpmforge powyżej.


Potwierdzone również na
Centos

1

Miałem ten błąd i zauważyłem, że mam różne wersje Ruby zainstalowane z HomeBrew, wraz z wieloma klejnotami, których już nie używałem. Więc zrobiłem pełne czyszczenie w ten sposób:

$ 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

Jeśli nie używasz Gemfile, upewnij się, że wiesz, które klejnoty zainstalować ponownie.


1

W moim przypadku wszystko, co potrzebne do zrobienia było

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

Teraz FWIW gem listobejmuje

psych (2.2.4, default: 2.2.2)

Jestem na macOS Sierra i to zadziałało. To samo rozwiązanie zgłoszone w tej kwestii GitHub tu Spróbuj najpierw jako rozwiązanie jest znacznie prostsze i mniej drastyczne niż inni na tej stronie.
mljrg

1
  • Ubuntu
  • Korzystanie z RVM
  • Przyczyna: sprzeczne wersje klejnotów Psych między ruby ​​2.4.4 i ruby ​​2.5.1

Spędziłem kilka godzin, próbując pozbyć się mojego błędu i żadna z odpowiedzi tutaj nie pasowała do mojego przypadku, więc pomyślałem, że opublikuję, jak go rozwiązałem ...

W moim przypadku, kiedy wpadłem gem list | grep psych, miałem następujący wynik: psych(default: 3.1.0, default: 3.0.2).

Najwyraźniej od wersji 2.5.0 ruby ​​zależy od nowszej wersji psych (3.1.0) i ustawienie obu jako domyślnych powodowało bałagan. Zwróć uwagę, że nigdy nie udało mi się dowiedzieć, dlaczego oba zostały ustawione jako domyślne - z tego powodu całkowicie wymazałem wersje rvm i ruby ​​z mojego komputera.

Aby więc usunąć starszą wersję (3.0.2) z ustawiania jako domyślną, przejdź do ~/.rvm/gems/ruby-x.x.x@global/specifications/default. Jeśli uruchomisz ls | grep psych, zwróci tutaj obie wersje klejnotu. Jeśli chcesz zachować wersję 3.1.0 jako domyślną, po prostu uruchom, mv psych-3.0.2.gemspec ../a następnie spróbuj uruchomić, gemlistaby upewnić się, że wyświetla teraz tylko jedną wersję jako domyślną ...

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

Mam nadzieję, że to komuś pomoże!


0

W Snow Leopardzie rozwiązanie Catharz nie zadziałało. To rozwiązanie jednak:

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

(Ponowna instalacja rvm dała mi ostrzeżenie, że clang nie ma opcji „--with-libyaml”, ale mimo to rozwiązała komunikat o błędzie).


0

To działało dla mnie przynajmniej na Ubuntu 10.04

$ sudo apt-get install libtool

$ rvm ponownie zainstaluj 1.9.3


0

W systemie Solaris:

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

dodać /usr/local/libdo ścieżki wyszukiwania bibliotek współdzielonych (patrz podręcznik)


To pytanie o os x.
zishe

0

Kiedy zmieniłem wersję 64-bitową na 32-bitową w systemie Snow Leopard 10.6.8, ponownie zainstalowałem Ruby (używany rvm), aby działał na wersji 32-bitowej i napotkałem ten sam problem. Więc po prostu `` wyczyściłem '' wszystko, co wcześniej buforował rvm i rozwiązałem problemy. Mam nadzieję, że ta wskazówka może komuś pomóc.

rvm cleanup all

rvm install ruby_version_here // (W ten sposób rvm również ponownie pobierze najnowszy yaml).

BTW, jeśli nadal napotykasz ten problem, myślę, że możesz spróbować:

gem zainstalować psych

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.