Игнорирование GEM, потому что его расширения не построены

133

На рабочем и домашнем компьютерах я недавно обновил Ruby до 2.3.1, используя ruby-install. Я использую в chrubyкачестве переключателя Ruby.

Я начал видеть это предупреждение в своем терминале:

Ignoring bcrypt-3.1.11 because its extensions are not built.  Try: gem pristine bcrypt --version 3.1.11
Ignoring bcrypt-3.1.10 because its extensions are not built.  Try: gem pristine bcrypt --version 3.1.10
Ignoring binding_of_caller-0.7.2 because its extensions are not built.  Try: gem pristine binding_of_caller --version 0.7.2
Ignoring byebug-9.0.5 because its extensions are not built.  Try: gem pristine byebug --version 9.0.5
Ignoring byebug-5.0.0 because its extensions are not built.  Try: gem pristine byebug --version 5.0.0
Ignoring concurrent-ruby-ext-1.0.2 because its extensions are not built.  Try: gem pristine concurrent-ruby-ext --version 1.0.2
Ignoring debug_inspector-0.0.2 because its extensions are not built.  Try: gem pristine debug_inspector --version 0.0.2

На моем рабочем компьютере список был намного длиннее, но его легко разрешить. Когда я попробовал предложенное gem pristine GEM, он сказал мне, что не может найти драгоценный камень, поэтому я побежал gem install GEM, и это решило проблему.

Дома ничего не работает.

Вещи, которые я пробовал, исходя из здравого смысла и различных других вопросов по стеку:

  • gem pristine GEM
  • gem pristine --all
  • удаление и повторная установка драгоценного камня
  • gem update
  • gem update --system
  • bundle update
  • удаление и переустановка bundler
  • удаление и повторная установка rails(хотя это не проблема Rails.)
  • удаление ~/.bundle/
  • открыв XCodeи позволив ему установить некоторые расширения (он действительно должен был это сделать, но ничего не исправил).
  • работает brew doctorи решает все мелкие вопросы, потом brew updateиbrew upgrade
  • gem install curb (Я не могу себе представить, какое отношение этот драгоценный камень имеет к этой проблеме, но два разных человека указали это как последний шаг своего исправления к одному и тому же предупреждению.)
Филипп Лонгман
источник
1
Я даже вижу такое же предупреждение, если драгоценные камни не установлены. Я удалил, bcryptно он все равно дал мне два предупреждения об этом.
Филип Лонгман,
1
вы обновляли бандлер? при удалении и повторной установке будет использоваться только то, что находится в вашем Gemfile.lock. Bundler - это тот, кто будет создавать расширения. Кроме того, в вашем выводе перечислено несколько версий драгоценных камней, поэтому вы должны знать, что это общесистемная версия для этой версии ruby ​​(это означает, что вам нужно будет перестроить несколько драгоценных камней).
Энтони,
Я находился в своей домашней папке, а не в проекте Rails, поэтому Gemfile не было.
Филип Лонгман,
Такая же проблема произошла со мной (с использованием rvm). gem pristine --allне сработало. Решено путем удаления всех драгоценных камней, включая сборщик. Затем установил упаковщик gem install bundlerи, наконец, вернулся к моему проекту и запустил его, bundle installкоторый переустановил все мои драгоценные камни, и все работает
Дэвид Уотсон
В моем случае это было вызвано расширением vim. Я использовал псевдоним vim = "rvm use system do vim", чтобы обойти это. Но я увидел предупреждение только при выходе из vim, поэтому, если вы видите его в других ситуациях, это, вероятно, не применимо.
Брайан Детерлинг, 03

Ответы:

179

Сегодня я столкнулся именно с этой проблемой - получаю подобные предупреждения для драгоценных камней, которые даже не были установлены!

... Что ж, оказывается, драгоценные камни были установлены - для другого рубина, чем тот, который я активировал с помощью chruby (2.2.3 против 2.3.1).

Переход на все разные рубины и запуск gem pristine --allна всех из них решил проблему.

sevenseacat
источник
3
Это сработало для меня, сделав это только на текущем рубине (я использую rvm). Может быть, это мешает кому-то делать слишком много уборки;)
Sandro L
1
Иногда gem pristine --allбесполезно. См. Этот ответ на Спросите у другого для получения дополнительной информации.
GDP2
если gem pristine --allесть проблемы с разрешениями, вы должны проверить which ruby. brew link --overwrite ruby && source ~/.bash_profileи беги gem pristine --allможет помочь
Крис Йим
Ни одно из этих решений не работает для меня, и у меня такая же проблема.
Alex Cohen
19

Я столкнулся с этой проблемой и выполнил все те же команды, что и выше, даже зашел так далеко, что удалил все мои ранее установленные версии Ruby. Однако ошибка не исчезла.

Оказалось, что для различных (ранее удаленных) версий в ~/.gem/ruby/. После удаления папок, которыми я больше не пользовался, ошибки исчезли.

Opes
источник
2
Это сделало это для меня. rm -rf. Раньше я безуспешно пытался установить все свои драгоценные камни в чистом виде.
StevenNunez 06
10

У меня тоже была эта проблема сегодня, и это расстраивало, потому что я не мог печатать, потому что весь мой редактор мигал красным с сообщениями об ошибках.

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

Команда gemтакже перезаписывается, когда у вас есть rbenv и rvm.

Посмотрите, какие из них вы установили, набрав;

which rvm
which rbenv
which chruby

Если один из них установлен, он вернет путь. Затем удалите их, обязательно полностью очистите все каталоги и начните с чистой установки.


удалять

Вот что я сделал для rvm ;

rvm implode
gem uninstall rvm
rm -rf ~/.rvm
rm -rf ~/.rvmrc

Вот что я сделал для rbenv

Сначала установил https://github.com/meowsus/rbenv-clean , затем

rbenv clean
sudo apt-get remove rbenv
rm -rf ~/.rbenv

Переустановка

Тогда у вас будет чистый домашний каталог для работы. Я переустановил rbenv с помощью Как установить Ruby 2.1.4 на Ubuntu 14.04 . И наконец;

rbenv rehash
Саймон Сомлай
источник
Простое удаление материала, связанного с rvm, устранило эту проблему для меня на macOS
neu242
6

Я сделал все, что было сказано выше, включая

  • xcode-select - установить
  • переустановить рубин
  • переустановить все драгоценные камни
  • драгоценный камень первозданный - все

но для меня проблема была такой же. Я просто перезагрузил свой Mac в качестве последней надежды, и предупреждающие сообщения исчезли.

Странно, но если кто-то борется с этой проблемой после того, как попробовал все на StackOverflow, попробуйте перезагрузить компьютер.

Себастьян Ким
источник
4
Спасибо, что поделились советом по перезагрузке. У меня была такая же проблема на Mac, и я смог ее решить, просто запустив новый сеанс терминала.
Либби
3

Если вы установили RVM, возможно, вы заметили ошибку, потому что вы установили разные версии.

Проверяйте и удаляйте ненужные версии, но я думаю, что это не лучший подход. В любом случае ошибок нет.

rvm list
rvm use ruby-version
rvm remove ruby-useless-version

После обновления cocoapods его следует ввести в .rvm GEM_HOME

gem uninstall cocoapods
gem install cocoapods

Вероятно, pod COMMANDвыдаст ошибку о minitestдрагоценном камне, поэтому -gem install minitest

dimpiax
источник
2

TL; DR - драгоценным камням Ruby не нравятся Ruby, работающие по символическим ссылкам или перемещенные оттуда, где они были созданы (из-за встроенных шебангов)

Если вызывается каталог Ruby или переменные среды указывают на каталог с символической ссылкой, или копируются или переименовываются, это сообщение скорее всего. Я использую chruby и использовал символическую ссылку /opt/rubies/->/usr/local/ruby/ , но логика динамического поиска библиотек Ruby не работает с этим.

В моем случае решение состояло в том, чтобы заменить символическую ссылку на настоящие рубины /opt/rubies/и запускать gem pristine --allв каждом Ruby. Тем, кто использует RVM или Rbenv, удачи, не начинать с нуля.

Возможно, это не ваша точная проблема, но, надеюсь, это поможет.


источник
1
Оказалось, что это бег gem pristine --allпо всей их части. Спасибо, что воскресили этот мертвый вопрос. Я был близок к тому, чтобы просто сжечь все это дотла и начать заново.
Филип Лонгман,
2

Добавлю сюда свой вкус. Я использовал rbenvустановку через Homebrew и получал четыре таких сообщения «игнорирование ... расширения не созданы». В частности:

Ignoring bcrypt-3.1.12 because its extensions are not built.  Try: gem pristine bcrypt --version 3.1.12
Ignoring bindex-0.5.0 because its extensions are not built.  Try: gem pristine bindex --version 0.5.0
Ignoring bootsnap-1.3.2 because its extensions are not built.  Try: gem pristine bootsnap --version 1.3.2
Ignoring byebug-10.0.2 because its extensions are not built.  Try: gem pristine byebug --version 10.0.2

Я много чего пробовал в этой ветке, но безуспешно. Наконец, в моем случае я сделал:

  • brew uninstall rbenv
  • rm -rf ~/.rbenv
  • brew install rbenv

В этот момент я все еще получал ошибки, но теперь у меня была только одна версия Ruby, с которой нужно было бороться:

$ rbenv versions
* system (set by /Users/will/.rbenv/version)

На этом этапе я попытался, sudo gem pristine --allно мне отказали в разрешении на доступ к системному каталогу Gems.

Итак, я прошел через все драгоценные камни, как будто

sudo gem pristine bcrypt --version 3.1.12 (и т.д)

И наконец ошибки исчезли.

wrydere
источник
1

Это старая ветка, но я сам столкнулся с этой проблемой.

Вам не нужно перезагружать компьютер, вам просто нужно обновить среду, вы можете сделать это с помощью команды rehash:

rehash

На странице руководства: rehash command re-computes the internal hash table of the contents of directories listed in the path environmental variable to account for new commands added.

Yacc
источник
1
О какой ОС ты говоришь?
rbanffy 03
rehashили hash -rдля bash - это команда оболочки, доступная в * nix. Когда оболочка C запускается, она строит хеш-таблицу всех команд на своем пути: имя каждой команды и ее абсолютный путь. Итак, после запуска csh, если новые программы добавляются в каталоги по пути, вам нужно использовать команду rehash оболочки, чтобы перестроить ее хеш-таблицу. (см. docstore.mik.ua/orelly/unix3/upt/ch27_06.htm )
yacc
1

У меня была эта проблема, но только когда я начинал tmuxиспользовать сеанс tmuxinator.

Оказалось, это потому, что я использую tmuxinatorfrom brewвместо того, чтобы устанавливать его gem install. Возможно, использование chrubyв одно и то же время тоже способствовало возникновению проблемы.

p / s: Я также удалил неиспользованный рубин, ~/.gem/rubyно я сомневаюсь, что это причина, по которой эта проблема была решена для меня.

Amree
источник
1

Запуск gem pristine --allсначала не помог, но потом я понял: скрипт, который я запускал, начинался со строки:

#!/usr/bin/ruby

В моей системе macOS (Catalina, но я не думаю, что это имеет значение) это указывает на Ruby, поставляемый с системой, а не на тот, который установлен RVM. Запуск gem pristine --allисправлял установку RVM, но мой сценарий вызывал другую версию Ruby.

Для меня исправление заключалось в использовании этой envкоманды для вызова любого Ruby, указанного в текущей оболочке PATH. Изменение верхней строки скрипта на это исправило:

#!/usr/bin/env ruby

Дэйв Седдиа
источник
Со мной только что случилось - спасибо! Это означает, что bundle installустановлены драгоценные камни (и их собственные расширения) для рубина, выбранного с помощью переключателя RVM Ruby, где сценарий, относящийся к системному Ruby, не может их найти. Ваше решение - стандартная практика, позволяющая заставить скрипты и гемы Ruby работать с установленными пользователем рубинами ( см . Раздел Ресурсы ).
tanius
Это поставило меня на верный путь! В моем случае я хотел, чтобы tmuxinator был утилитой (а не в комплекте для конкретного проекта), поэтому я установил его на Ubuntu. Так сделал, apt purge tmuxinatorа потом gem install tmuxinatorзаставил работать. Мне, вероятно, придется устанавливать его каждый раз, когда я обновляю свою версию Ruby, отличную от проекта, но мне это нравится больше. Спасибо!
лабиринт
1

Запускаем Mac OS Catalina, варим и рбенв ...

Столкнувшись с этой точной проблемой сегодня и просмотрев здесь все ответы, я в конце концов наткнулся на другую причину этой ошибки:

Ignoring nokogiri 1.10.7 because its extensions are not built. Try: gem pristine nokogiri --version 1.10.7

И, конечно же, нетронутый драгоценный камень не помог.

Моя проблема заключалась в жестко запрограммированных переменных среды GEM_HOME и GEM_PATH, которые переопределяли rbenv.

Итак, убедитесь, что вы не установили GEM_PATH и GEM_HOME в ~ / .zshrc

Томм П
источник
0

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

rbenv глобальный 2.5.1

Эрик Джонс
источник
0

Это также проблема, когда вы разрабатываете на Mac, а затем создаете образ Docker: https://forums.aws.amazon.com/thread.jspa?messageID=879802&tstart=0

Когда вы выполняете команду "bundle install --deployment", сборщик создаст в нем каталог поставщика с вашими драгоценными камнями. Обратите внимание, что в то время как это включает ваши драгоценные камни в локальную папку, он будет включать только собственные расширения для вашей платформы. Поскольку вы используете macOS, это будет Дарвин. Вам нужно будет повторить процесс в 64-разрядной среде Linux x86.

NorseGaud
источник
0

Предложение Либби просто начать новый сеанс терминала (которое она прокомментировала ответом Себастьяна Кима) сработало для меня. Гораздо быстрее, чем любой другой, поэтому я хотел дать ответ, чтобы он был более заметным.

Джим
источник
0

В моем случае я пытался бежать, pristine --allно получал:

Ignoring ffi-1.11.1 because its extensions are not built.  Try: gem pristine ffi --version 1.11.1
Ignoring jaro_winkler-1.5.3 because its extensions are not built.  Try: gem pristine jaro_winkler --version 1.5.3
Ignoring psych-3.1.0 because its extensions are not built.  Try: gem pristine psych --version 3.1.0
/.rbenv/versions/2.3.1/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require': incompatible library version - /.gem/gems/psych-3.1.0/lib/psych.bundle (fatal) 

Затем я удалил содержимое, так Users/{{user.name}}⁩/⁨.gem⁩как мне нужно было запустить bundle install --force, он все переустановил, затем команда pristine --allсработала, как ожидалось

Луиза Эрнандес
источник
0

Это решение сработало для меня для RubyMine IntelliJ

У меня было два разных терминала и RVMи ruby<Version>.

Решение:

Мне пришлось переключить его на версию RVM, чтобы ошибки исчезли в Preferences>Languages&Frameworks>Ruby SDK

Ошибки:

Ignoring executable-hooks-1.6.0 because its extensions are not built. Try: gem pristine executable-hooks --version 1.6.0 rubymine

Ignoring gem-wrappers-1.4.0 because its extensions are not built. Try: gem pristine gem-wrappers --version 1.4.0

введите описание изображения здесь

Роджер Перес
источник