Как решить ошибку «установка ruby ​​отсутствует псих»?


158

Я использовал 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).


Вы пытались установить libyaml, следуя этим инструкциям: pyyaml.org/wiki/LibYAML ?
моряк

1
Вы используете доморощенный? Попробуй brew doctor. Это перечисляет проблему со ссылкой libyaml?
Stoutie

3
Пользователи Mac: rm -rf /usr/local/lib/ruby/gems/ && brew reinstall rubyкак указано в официальном выпуске Gtihub, посвященном самодовольному ядру, проблема решена
Трэвис Кларк

Ответы:


218

В моем случае

rvm pkg install libyaml

и

rvm reinstall ruby-1.9.3-p125

решил проблему.

Для людей, использующих Ubuntu, убедитесь, что libtoolон установлен до выполнения описанных выше шагов:

sudo apt-get install libtool

Для пользователей MacOS (с homebrew):

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

11
Вы действительно имеете в виду:rvm package install libyaml
johncblandii

3
Нет, он имел в виду rvm pkg install libyaml. От rvm usage: pkg :: Install a dependency package {readline,iconv,zlib,openssl}.
jordanpg

Я думаю, это зависит от того, какую версию rvm вы используете. В rvm 1.6.9 это так package.
Вануан

8
После запуска rvm pkg install libyamlрекомендуется переустановить все рубины с помощью rvm reinstall all --force. Это может быть полезно, если у вас их больше одного.
Харалан Добрев

7
Пришлось сделать rvm reinstall 1.9.3 --with-libyaml-dir=/home/rails/.rvm/usrкак предложено в serverfault.com/questions/442150/…
pcv

20

для убунту и рвм

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

работал


1
Мне пришлось «удалить все rvm» перед установкой libyaml. Это единственный способ
исправить

19

Если вы не используете rvm, а собираете и устанавливаете ruby ​​1.9.3 с нуля - например, вы управляете своими версиями ruby ​​с помощью rbenv - вы должны сначала установить libyaml. Получить его с http://pyyaml.org/ ; на данный момент вам нужен файл http://pyyaml.org/download/libyaml/yaml-0.1.4.tar.gz . Откройте архив и перейдите в получившуюся папку. Затем:

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

Теперь вы готовы построить рубин. Загрузите ruby ​​с http://ftp.ruby-lang.org/pub/ruby/ . Откройте архив и перейдите в получившуюся папку. Сейчас:

./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 (не уверен, что это связано), и когда я выполняю обновление связки, странно говорится, что для некоторых драгоценных камней требуется => 1.9.2 stackoverflow.com/questions/ 14116083 /…
Leahcim

ваши gem --versionзвуки исправить, но , может быть , у вас есть ваш путь потеряется из - за бывшее использование РВМ
матовые

4
И если вам нужно установить yaml без sudo, укажите префикс, отличный от /usr/localнастройки yaml, а затем настройте ruby ​​с помощью--with-opt-dir=/path/to/yaml/prefix --with-yaml --prefix=/path/to/ruby/prefix
Chadwick

Я знаю, что этому больше года, но вопрос был об ошибке с RVM. Как можно начать с «Если не использовать rvm»?
Питер Деген-Портной

18
brew install libyaml
rvm reinstall 1.9.3

Это то, что у меня сработало (на Snow Leopard).


Я должен был сделать это также. rvm pkg install libyaml не сделал этого для меня.
stringo0

9

В моем случае решением было добавить psychдрагоценный камень в Gemfile.


6

У меня была эта проблема. libyaml не будет компилироваться. Оказывается, мне не хватало libtool.

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

Это решило мою проблему.


1
Пакет libtool недоступен. Нечего делать.
Пол

1
Centos не может yum установить libtool? не верьте этому .. вы используете систему, не основанную на redhat, и вам нужно apt-get?
phil88530

@ phil88530 старая версия CentOS может быть более глупой, чем вы думаете
Деннис С.

@DennisCheung о, хорошо, никогда не играл со старым
phil88530

6

Если вы установили ruby ​​на macOS с помощью homebrew, попробуйте это решение .

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

Обратите внимание, что это избавит от всех установленных драгоценных камней. Лучше всего сохранить список установленных драгоценных камней, gem listпрежде чем запускать это.


Но gem listэто то, что вызывает ошибку в первую очередь (для меня).
17

5
$ brew doctor
$ brew link libyaml

Решение всех brew doctorпроблем исправило это для меня. Я получил ошибку, очень похожую на ошибку спрашивающего при попытке gem install jekyll. Все команды через rvm тоже давали ошибки. Основная и не столь очевидная проблема заключается в том, что у доморощенного, я полагаю, средства, с помощью которых rvm устанавливает вещи, были проблемы. Я недавно обновился до Mavericks на Mac OS. В моем случае решение всех brew doctorпроблем устраняло каждое сообщение об ошибке. Сейчас все работает без сбоев.
Stoutie

4

Я наконец исправил это. Проблема заключалась в том, что, хотя я установил libyaml с brew, он никогда не был связан. Мне пришлось удалить конфликтующий заголовочный файл, а затем brew link libyaml.


4

Установка ruby ​​с помощью rvm для Mac OSX, использование autolibs для установки libyaml и первая помощь по удалению libyaml.

Это сработало для меня:

brew uninstall libyaml
rvm autolibs enable
rvm reinstall ruby-2.1.1

Спасибо @ user33302. Выше решение также работал для меня на Mac OS EI CAPITON.
Сандип Ахуджа

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

3

Я переустановил ruby ​​1.9.3 с поддержкой libyaml:

rvm reinstall 1.9.3 --with-libyaml

Я убедился, что буду использовать 1.9.3 перед установкой psych:

rvm use 1.9.3

Я установил псих:

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

перезагрузите ваш .rvmrc (cd out, cd in)

bundle

2

Ни один из этих ответов не работал для меня.

Я нашел свой ответ на https://github.com/sstephenson/ruby-build/issues/119 Я на виртуальной машине Centos 6.3.

ВЫ ДОЛЖНЫ установить libyaml перед установкой ruby. Если вы уже установили 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

2

Я создал файлы libyaml отдельно от исходного кода и установил их в / usr / local / lib. Рубин, созданный RVM, все еще не видел их, и вместо того, чтобы копаться в make-файле или системе LD_LIBRARY_PATH, я просто скопировал / usr / local / lib / libyaml * в ~ / .rvm / rubies / ruby-1.9.3-p327 / Библиотека /

Это успокоило предупреждение.


2

Вот что у меня работало в Ubuntu:
- установка libyaml-dev (sudo apt-get install libyaml-dev)
- установка rvm + ruby ​​1.9.3


2

Я попробовал все эти ответы и все еще не смог заставить его работать. Я установил libyaml с помощью homebrew, а затем установил Ruby 1.9.3 и 2.0.0 с помощью rvm. Каждый раз он жаловался на то, что мне не хватает психов (libyaml). Но попытка установить libyaml сказала мне, что он уже установлен. Промыть, повторить. Urgh.

Наконец то, что я сделал, это удалил libyaml. Затем я включил autolibs в rvm , что (по крайней мере, в OSX) позволяет rvm более напрямую устанавливать и управлять зависимостями. Теперь, когда я установил Rubies, rvm смог установить libyaml и определить, что он был в нужном месте.

Так что, если вы перепробовали все остальные варианты, попробуйте удалить libyaml, а затем установить Ruby. Это интуитивно понятно из сообщений об ошибках, но это то, что, наконец, сработало для меня.


Вам не нужен libyaml: вам нужен libyaml-dev, который rvm устанавливает для вас с помощью --autolibs
Confusion

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.

После нескольких переустановок я понял, что он ищет yaml в версии ruby 1.9.1вместо 1.9.3. Так что я понизил

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

И это сработало 8D!


1

На CentOS 6.3 ничего из вышеперечисленного не работало. Однако установка libyaml из исходного кода перед установкой ruby ​​решила проблему.

$ 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

1

я использую

rvm 1.16.20 (версия) Уэйна Э. Сегина, Михала Паписа [https://rvm.io/]

а также получил следующую ошибку при установке пакета

.rvm / rubies / ruby-1.9.3-p194 / lib / ruby ​​/ 1.9.1 / yaml.rb: 56: in `': похоже, в вашей установке ruby ​​отсутствует psych (для вывода на YAML). Чтобы устранить это предупреждение, пожалуйста, установите libyaml и переустановите ваш ruby.

Вот три различных способа решения этой ошибки без необходимости установки psy

  1. экспорт 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
    $ 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 ****
              # когда родственник активен, 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"
              if [[-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"
              if [[-d "$ {rvm_path} / usr / lib64"]]
    ! затем __rvm_update_configure_env LDFLAGS = "- L $ {rvm_path} / usr / lib64"
              фи
            фи

    --- 106 123
              # когда родственник активен, 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}"
              if [[-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}"
              if [[-d "$ {rvm_path} / usr / lib64"]]
    ! затем __rvm_update_configure_env LDFLAGS = "- L $ {rvm_path} / usr / lib64 $ {LDFLAGS}"
              фи
            фи


Я подтвердил, что этот патч не нужен, если вы используете последнюю стабильную версию rvm 1.18.4
victorv

1

Я также боролся с теми же неудачами в rvm install ruby-2.0.0течение многих, МНОГИХ часов. Я перепробовал все разные способы установки libyaml; wget source, yumиrvm . Я также попробовал все различные подходы, перечисленные в похожих темах. Поскольку я попробовал все разные методы, у меня было несколько установок и локаций libyaml.

RVM вполне способен установить необходимые зависимости в ~/.rvm. Простое удаление файлов libyaml из инсталляции без RVM устранило эту проблему для меня:

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

rvm reinstall ruby-2.0.0-p0

Работает!


1

Не 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, отредактировав этот файл и включив = 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

Установите свой GEM_HOME в .cshrc и source

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

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

1

Если вы собираете ruby ​​из исходного кода (я собрал 1.9.3 на Fedora 20), вам понадобится это до того, как вы выполните команду configure / make для сборки ruby:

yum install libyaml-devel

(в дополнение к yum установите libyaml.) Аналогично ответу Фрэнсиса с использованием rpmforge выше.


Также подтверждено на Centos 5.6
marcovtwout

1

У меня была эта ошибка, и я заметил, что у меня установлены различные версии Ruby с HomeBrew, а также много драгоценных камней, которые я больше не использовал. Так сделали полную уборку вот так:

$ 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, убедитесь, что вы знаете, какие драгоценные камни переустанавливать.


1

В моем случае все, что мне нужно было сделать, это

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)

Я на MacOS Sierra, и это сработало для меня. Это же решение сообщили в этом вопросе GitHub здесь Попробуйте это решение первой , как это намного проще и менее резким , чем другие в этой странице.
mljrg

1
  • Ubuntu
  • Использование RVM
  • Причина: конфликт версий самоцвета Psych между ruby ​​2.4.4 и ruby ​​2.5.1

Я потратил несколько часов, пытаясь убрать мою ошибку, и ни один из ответов здесь не подходил для моего случая, поэтому я решил опубликовать, как я ее решил ...

В моем случае , когда я бежал 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его, он вернет обе версии драгоценного камня здесь. Если вы хотите сохранить 3.1.0 по умолчанию, просто запустите, mv psych-3.0.2.gemspec ../а затем попробуйте запуститьgemlist чтобы убедиться, что сейчас он только одну версию по умолчанию ...

ТЛ; др cd /.rvm/gems/ruby-x.x.x@global/specifications/default mv psych-3.0.2 ../

Надеюсь, это поможет кому-то!


0

На Snow Leopard решение от Catharz не сработало для меня. Это решение, однако, сделало:

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

(Переустановка rvm дала мне предупреждение о том, что у clang нет опции «--with-libyaml», но это все равно решило сообщение об ошибке.)


0

Это работало для меня, по крайней мере, на Ubuntu 10.04

$ sudo apt-get установить libtool

$ rvm переустановить 1.9.3


0

На Солярисе:

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

добавить /usr/local/libв общий путь поиска библиотеки (см. man crle)


Этот вопрос о OS X.
Зише

0

Когда я переключаюсь с 64-разрядной на 32-разрядную версию на Snow Leopard 10.6.8, я переустанавливал ruby ​​(использовал rvm) для работы на 32-разрядной версии и столкнулся с той же проблемой. Так что я просто «очищаю» все, что кэшировалось с помощью rvm раньше, и проблемы решались Надеюсь, что этот совет может помочь кому-то.

рвм убери все

rvm install ruby_version_here // (Таким образом, rvm также повторно загрузит новейший yaml).

Кстати, если вы все еще сталкиваетесь с этой проблемой, я думаю, вы можете попробовать:

драгоценный камень установить псих

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.