Ігнорування 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 використовувати систему do vim", щоб обійти його. Але я побачив попередження лише тоді, коли я вийшов із vim, тому якщо ви бачите його в інших ситуаціях, це, ймовірно, не застосовуватиметься.
Брайан Детерлінг

Відповіді:


179

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

... Ну, виявляється, дорогоцінні камені були встановлені - на інший рубін, ніж на той, який я встановив активним з чарубі (2.2.3 проти 2.3.1).

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


3
Це працювало для мене, роблячи це лише на поточному рубіні (я використовую rvm). Можливо, це заважає комусь робити занадто багато прибирання;)
Сандро Л

1
Іноді gem pristine --allкористі не принесе. Дивіться цю відповідь на запитання різних для отримання додаткової інформації.
ВВП2

якщо gem pristine --allє проблеми з дозволом, ви повинні перевірити which ruby. brew link --overwrite ruby && source ~/.bash_profileі біг gem pristine --allможе допомогти
Chris Yim

Жодне з цих рішень для мене не працює, і у мене є те саме питання.
Алекс Коен

19

Я зіткнувся з цим питанням і дотримувався всіх тих самих команд, що і вище, навіть заходячи так далеко, щоб видалити всі мої раніше встановлені версії Ruby. Однак помилка зберігалася.

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


2
Це зробило це для мене. rm -rf. Раніше я намагався невдало встановити всі свої дорогоцінні камені безрезультатно.
StevenNunez

10

У мене ця проблема була і сьогодні, і це засмутилося, тому що я не міг набрати текст, оскільки весь мій редактор блимав червоним кольором із повідомленнями про помилки.

Я не зовсім впевнений, що саме це спричинило, але я вважаю, що у нас є кілька рубінових версій АБО кілька менеджерів версій рубіну встановлених і вони перекривають один одного і в іншому випадку безлад ваших шляхів в бік дорогоцінних каменів.

The 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 речей
вирішило

6

Я зробив все, що було сказано вище, в тому числі

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

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

Дивно, але якщо хтось бореться з цією проблемою, випробувавши все на StackOverflow, спробуйте перезавантажити машину.


4
Дякуємо, що поділилися порадою про перезавантаження. У мене була така ж проблема на Mac, і я зміг її вирішити лише запустивши новий термінальний сеанс.
Ліббі

3

Якщо ви встановили RVM, можливо, ви виявите помилку, оскільки ви встановили різні версії.

Перевіряйте та видаляйте непотрібні версії, але я вважаю, що це не гарний підхід. У будь-якому випадку помилки пішли.

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

Після оновлення какаодів його слід вводити в .rvm GEM_HOME

gem uninstall cocoapods
gem install cocoapods

Можливо pod COMMAND, викине помилку про minitestдорогоцінний камінь, так що -gem install minitest


2

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

Якщо викликається каталог Ruby або середовище vars вказує на каталог, що посилається на посилання, або копіюється або перейменовується, це повідомлення, ймовірно, є. Я використовую 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 (тощо)

І нарешті помилок не було.


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.


1
Про яку ОС ви говорите?
rbanffy

rehashабо hash -rдля bash - команда оболонки, доступна на * nix. Коли запускається оболонка C, вона будує хеш-таблицю з усіх команд на своєму шляху: кожної назви команди та її абсолютної назви шляху. Отже, після запуску файлу csh, якщо нові програми додаються до каталогів на цьому шляху, вам потрібно скористатися командою повторного обшивки оболонки, щоб відновити її хеш-таблицю. (cf: docstore.mik.ua/orelly/unix3/upt/ch27_06.htm )
yacc

1

У мене була ця проблема, але тільки коли я починав tmux використовувати сеанс tmuxinator.

Виявилося, це тому , що я використовую tmuxinatorзbrew замість установки його використання gem install. Можливо, використання chrubyодночасно сприяло і проблемі.

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


1

gem pristine --allСпочатку запуск не допоміг, але потім я зрозумів: сценарій, який я виконував, починався з рядка:

#!/usr/bin/ruby

У моїй системі macOS (Каталіна, але я не думаю, що це має значення), це вказує на Ruby, який постачається разом із системою, а не на ту, яку встановив RVM. Біг gem pristine --allвиправляв установку RVM, але мій сценарій називав іншу версію Ruby.

Виправленням для мене було використання envкоманди для виклику того, що Ruby вказано в поточній оболонці PATH. Змінивши верхній рядок сценарію на цей виправлений:

#!/usr/bin/env ruby


Щойно зі мною трапилось - спасибі! Це означає, що bundle installвстановлені дорогоцінні камені (та їх рідні розширення) для рубіну, вибраного через комутатор RVM Ruby, де сценарій, що посилається на систему Ruby, не може їх знайти. Ваше рішення - це стандартна практика, щоб сценарії та дорогоцінні камені Ruby працювали з встановленими користувачем рубінами ( див. ).
таніус

Це поставило мене на правильний шлях! У моєму випадку я хотів, щоб tmuxinator був утилітою (а не пакетом dep для конкретного проекту), тому я вдало встановив його на Ubuntu. Так робив, apt purge tmuxinatorа потім gem install tmuxinatorзмусив його працювати. Ймовірно, мені доведеться встановити його, коли я оновлюю непроектну рубінову версію, але це мені подобається краще. Дякую!
лабіринт

1

Запуск Mac OS Catalina, пивоварня та rbenv ...

Натрапивши на цю точну проблему сьогодні і переглянувши всі відповіді тут, я врешті-решт натрапив на ще одну причину цієї помилки:

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

Коли ви робите "встановлення пакета - deployment", bundler створить каталог постачальників з вашими дорогоцінними каменями в ньому. Зауважте, що, хоча це включає ваші дорогоцінні камені у локальній папці, вони включатимуть лише вбудовані розширення для вашої платформи. Коли ви на macOS, це буде Дарвін. Вам потрібно буде повторити процес у 64-бітному середовищі Linux x86.


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

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.