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

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

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

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 (Я не могу себе представить, как этот драгоценный камень имеет отношение к этой проблеме, но два разных человека назвали его последним шагом к тому же предупреждению.)

23 ответа

Решение

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

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

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

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

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

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

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

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/bernsie/rbenv-clean, затем

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

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

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

rbenv rehash

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

      Ignoring bigdecimal-2.0.0 because its extensions are not built. Try: gem pristine bigdecimal --version 2.0.0
Ignoring date-3.0.1 because its extensions are not built. Try: gem pristine date --version 3.0.1
Ignoring dbm-1.1.0 because its extensions are not built. Try: gem pristine dbm --version 1.1.0
Ignoring etc-1.1.0 because its extensions are not built. Try: gem pristine etc --version 1.1.0

Вот пример:

      gem pristine bigdecimal --version 2.0.0

поэтому запуск команды каждой строки решил мою проблему.

Я сделал все, что упомянуто выше, включая

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

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

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

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

#!/usr/bin/ruby

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

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

#!/usr/bin/env ruby

Добавляя мой собственный вкус здесь. я использую 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 (так далее)

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

Если вы установили 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

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

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

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

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

Запускаем 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

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

Вам не нужно перезагружать компьютер, вам просто нужно обновить среду, вы можете сделать это с помощью команды 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.

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

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

Большинство комментариев здесь на правильном пути. Эта проблема часто возникает после обновления версии Ruby. Я просмотрел код команды gem и вот его суть.

Расширения компилируются в подкаталог gems / gem / ext домашнего каталога gems. Например, в моей установке Cygwin (и аналогично в Raspbian) расширение BigDecimal компилируется в /usr/share/gems/gems/bigdecimal-1.3.5/ext/bigdecimal/bigdecimal.so.

Однако это не то место, где на расширение ссылаются при запуске - это из / usr / lib / gems / ruby ​​/ ver / gem . Снова используя BigDecimal, файл расширения при запуске загружается из /usr/lib/gems/ruby/2.3.0/bigdecimal-1.3.5/bigdecimal.so

Вот ключ: в этом же каталоге есть пустой файл тегов /usr/lib/gems/ruby/2.3.0/bigdecimal-1.3.5/gem.build_complete

Когда команда gem запускается, она обращается к каталогу gems / спецификаций, чтобы получить список установленных гемов и информацию о том, есть ли у них расширения. Если гем имеет расширения, gem (среди других проверок работоспособности) ищет файл тегов gem.build_complete. Если он не найден, он выдает сообщение об ошибке «Игнорировать гем, потому что его расширения не созданы».

Любое действие, которое восстанавливает все расширения, решит эту проблему. Или, в качестве полного взлома, если вы спешите и смелы, вы можете попробовать скопировать все содержимое / usr / lib / gems / ruby ​​/ oldver в / usr / lib / gems / ruby ​​/ newver, например

      cd /usr/lib/gems/ruby
cp -nv 2.3.0/* 2.6 

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

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

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

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

Удаление и переустановка Vagrant также работает. Там есть unistall.tool bash скрипт включен в установщик.dmg образа, который удалит Vagrant.

Нашел это решение здесь: Обновление расширений Vagrant и Gems не встроено

В Ubuntu это сработало для меня.

  1. source ~/.bash_profile
  2. sudo gem pristine --all

Я выполнил эти команды в Терминале и работал на меня:

  1. /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
  2. brew install ruby, может потребоваться sudo (sudo brew install ruby).
  3. echo 'export PATH="/usr/local/opt/ruby/bin:$PATH"' >> ~/.bash_profile
  4. source ~/.bash_profile
  5. sudo gem pristine --all

Я наткнулся на это , когда запускал Ruby 2.6 с драгоценными камнями, установленными с Ruby 2.7. Похоже, в версии 2.7.0 изменился каталог расширения ($GEM_HOME/extensions/x86_64-linux->$GEM_HOME/extensions/x86_64-linux-musl). Таким образом, Ruby 2.6 не смог найти установленные расширения.

В моем случае мне просто нужно было запустить правильную версию Ruby.

Если это не ваш случай,bundle pristineне поможет, так как гемы без расширений не считаются установленными .

Вы можете последовать совету рубина и сделатьgem pristine GEM --version VERSION. Но при этом останется старый каталог расширений. В этом, вероятно, нет ничего страшного, но если вы хотите этого избежать... Если вы используетеruby(docker) изображение, можно удалить$GEM_HOME(/usr/local/bundle) и переустановите все гемы.

Подробнее об этом здесь .

Если вы используете rvmкак и я, исправление могло быть простым:

rvm get stable
rvm reload

Как указано в этом ответе /questions/24855441/kogda-mozhno-ili-nuzhno-ispolzovat-chmod-gs-dlya-fajla-ili-kataloga/24855469#24855469

Это решение сработало для меня для 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

В моем случае я пытался бежать 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 работал как ожидалось

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

rbenv global 2.5.1

Другие вопросы по тегам