Игнорирование 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 это сработало для меня.
-
source ~/.bash_profile
-
sudo gem pristine --all
Я выполнил эти команды в Терминале и работал на меня:
-
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
-
brew install ruby
, может потребоваться sudo (sudo brew install ruby). -
echo 'export PATH="/usr/local/opt/ruby/bin:$PATH"' >> ~/.bash_profile
-
source ~/.bash_profile
-
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