Ignorer GEM car ses extensions ne sont pas construites

133

Sur mon ordinateur de travail et à la maison, j'ai récemment mis à niveau Ruby vers la version 2.3.1, en utilisant ruby-install. J'utilise chrubycomme sélecteur Ruby.

J'ai commencé à voir cet avertissement dans mon terminal:

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

Sur mon travail, ordinateur, la liste était beaucoup plus longue, mais facile à résoudre. Quand j'ai essayé le suggéré gem pristine GEM, il m'a dit qu'il ne pouvait pas trouver la gemme, alors j'ai couru gem install GEM, et cela l'a résolu.

À la maison, rien ne fonctionne.

Choses que j'ai essayées, du bon sens et de diverses autres questions de Stack:

  • gem pristine GEM
  • gem pristine --all
  • désinstaller et réinstaller le gem
  • gem update
  • gem update --system
  • bundle update
  • désinstallation et réinstallation bundler
  • désinstaller et réinstaller rails(bien que ce ne soit pas un problème spécifique à Rails.)
  • suppression ~/.bundle/
  • ouvrir XCodeet laisser installer certaines extensions (il fallait le faire, mais cela n'a rien corrigé.)
  • exécuter brew doctoret résoudre tous les problèmes mineurs, puis brew updateetbrew upgrade
  • gem install curb (Je ne peux pas imaginer ce que cette gemme a à voir avec ce problème, mais deux personnes différentes l'ont répertorié comme la dernière étape de leur correctif au même avertissement.)
Phillip Longman
la source
1
Je vois même le même avertissement si les gemmes ne sont pas installées. J'ai désinstallé bcryptet cela m'a toujours donné deux avertissements à ce sujet.
Phillip Longman
1
avez-vous mis à jour le bundler? la désinstallation et la réinstallation utiliseront simplement ce qui se trouve dans votre Gemfile.lock. Bundler est celui qui construira les extensions. En outre, votre sortie répertorie plusieurs versions de gemmes, vous devez donc savoir qu'il s'agit d'un système à l'échelle du système pour cette version de ruby ​​(ce qui signifie que vous aurez plusieurs gemmes à reconstruire).
Anthony
J'étais dans mon dossier personnel, pas dans un projet Rails, donc il n'y avait pas de Gemfile.
Phillip Longman
Le même problème m'est arrivé (en utilisant rvm). gem pristine --alln'a pas marché. Résolu en supprimant toutes les gemmes, y compris le bundler. Ensuite, j'ai installé le bundler gem install bundleret enfin je suis retourné à mon projet et j'ai exécuté bundle installce qui a réinstallé toutes mes gemmes et tout fonctionne
David Watson
Dans mon cas, cela a été causé par une extension vim. J'ai fait l'alias vim = "rvm use system do vim" pour le contourner. Mais je n'ai vu l'avertissement que lorsque j'ai quitté vim, donc si vous le voyez dans d'autres situations, cela ne s'appliquera probablement pas.
Brian Deterling

Réponses:

179

Je suis tombé sur ce problème exact aujourd'hui: recevoir des avertissements comme celui-ci pour des gemmes qui n'étaient même pas installées!

... Eh bien, il s'avère que les gemmes ont été installées - pour un rubis différent de celui que j'avais activé avec chruby (2.2.3 vs 2.3.1).

Passer à tous les rubis différents et les exécuter gem pristine --alltous a résolu le problème.

sevenseacat
la source
3
Cela a fonctionné pour moi en faisant cela uniquement sur le ruby ​​actuel (j'utilise rvm). Peut-être que cela empêche quelqu'un de faire trop de nettoyage;)
Sandro L
1
Parfois, gem pristine --allcela ne fera aucun bien. Voir cette réponse sur Ask Different pour plus d'informations.
GDP2
si vous gem pristine --allrencontrez des problèmes d'autorisation, vous devriez vérifier which ruby. brew link --overwrite ruby && source ~/.bash_profileet courir gem pristine --allpeut aider
Chris Yim
Aucune de ces solutions ne fonctionne pour moi et j'ai le même problème.
Alex Cohen
19

J'ai rencontré ce problème et j'ai suivi toutes les mêmes commandes que ci-dessus, allant même jusqu'à supprimer toutes mes versions de Ruby précédemment installées. Cependant, l'erreur a persisté.

Il s'avère qu'il restait quelques gemmes pour les différentes versions (précédemment désinstallées) dans ~/.gem/ruby/. Après avoir supprimé les dossiers que je n'utilisais plus, les erreurs ont disparu.

opes
la source
2
Cela l'a fait pour moi. rm -rf. J'avais déjà essayé d'installer toutes mes gemmes en vain.
StevenNunez
10

J'ai eu ce problème aujourd'hui aussi et c'était frustrant parce que je ne pouvais pas taper parce que tout mon éditeur clignotait en rouge avec des messages d'erreur.

Je ne suis pas tout à fait sûr de la cause exacte, mais je pense que c'est parce que nous avons plusieurs versions de ruby ​​OU plusieurs gestionnaires de versions de ruby installés et qu'ils se remplacent mutuellement et gâchent autrement vos chemins vers les gemmes.

La gemcommande est également écrasée lorsque vous avez rbenv et rvm.

Voyez ceux que vous avez installés en tapant;

which rvm
which rbenv
which chruby

Si l'un de ceux-ci est installé, il renverra un chemin. Ensuite, supprimez-les, assurez-vous de nettoyer complètement tous les répertoires et commencez par une nouvelle installation.


Retirer

Voici ce que je l'ai fait pour RVM ;

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

Voici ce que j'ai fait pour rbenv

D'abord installé https://github.com/meowsus/rbenv-clean , puis

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

Réinstaller

Ensuite, vous avez un répertoire personnel propre à partir duquel travailler. J'ai réinstallé rbenv avec Comment installer Ruby 2.1.4 sur Ubuntu 14.04 . Et enfin;

rbenv rehash
Simon Somlai
la source
La suppression des éléments liés à la RVM a résolu ce problème pour moi sur macOS
neu242
6

J'ai fait tout ce qui est mentionné ci-dessus, y compris

  • xcode-select - installer
  • réinstaller ruby
  • réinstaller toutes les gemmes
  • gemme vierge - tous

mais le problème était le même pour moi. Je viens de redémarrer mon Mac comme dernier espoir, et les messages d'avertissement ont disparu.

Bizarre, mais si quelqu'un est aux prises avec ce problème après avoir tout essayé sur StackOverflow, essayez de redémarrer votre machine.

Sebastian Kim
la source
4
Merci d'avoir partagé l'astuce de redémarrage. J'ai eu le même problème, sur un Mac, et j'ai pu le résoudre simplement en démarrant une nouvelle session de terminal.
Libby
3

Si vous avez installé RVM, il est possible que vous détectiez l'erreur car vous avez installé des versions différentes.

Vérifiez et supprimez les versions inutiles, mais je pense que ce n'est pas une bonne approche. Quoi qu'il en soit, les erreurs ont disparu.

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

Après avoir actualisé les cocoapodes, il doit être injecté dans .rvm GEM_HOME

gem uninstall cocoapods
gem install cocoapods

Probablement pod COMMANDlancera l'erreur à propos de minitestgem, donc -gem install minitest

dimpiax
la source
2

TL; DR - Les gemmes Ruby n'aiment pas les Rubis exécutés à partir de liens symboliques ou déplacés de l'endroit où ils ont été construits (à cause des shebangs intégrés)

Si le répertoire Ruby est appelé ou que les variables d'environnement pointent vers un répertoire lié par un lien symbolique, ou sont copiées ou renommées, ce message est probable. J'utilise chruby et je faisais des liens symboliques /opt/rubies/-> /usr/local/ruby/, mais la logique dynamique de recherche de bibliothèque de Ruby ne joue pas bien avec cela.

La solution dans mon cas était de remplacer le lien symbolique par des rubis réels /opt/rubies/et de l'exécuter gem pristine --alldans chaque Ruby. Pour les autres utilisant RVM ou Rbenv, bonne chance sans recommencer à zéro.

Ce n'est peut-être pas votre problème exact, mais j'espère que cela vous aidera.


la source
1
Il s'est avéré que c'était la course gem pristine --allde tous. Merci d'avoir ressuscité cette question morte. J'étais sur le point de tout brûler et de recommencer.
Phillip Longman
2

Ajout de ma propre saveur ici. J'utilise rbenvinstallé via Homebrew et recevais quatre de ces messages "ignorant ... extensions non construites". Plus précisément:

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

J'ai essayé beaucoup de choses dans ce fil sans succès. Enfin dans mon cas, j'ai fait:

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

À ce stade, j'obtenais toujours les erreurs, mais maintenant je n'avais qu'une seule version de Ruby à affronter:

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

À ce stade, j'ai essayé sudo gem pristine --allmais j'ai été rejeté pour les autorisations sur le répertoire système Gems.

Alors je suis passé et j'ai couru vierge sur chaque gemme, comme

sudo gem pristine bcrypt --version 3.1.12 (etc)

Et finalement les erreurs avaient disparu.

wrydere
la source
1

C'est un vieux fil, mais je viens de tomber sur ce problème moi-même.

Vous n'avez pas besoin de redémarrer votre machine, il vous suffit de rafraîchir votre environnement, vous pouvez le faire avec la commande rehash:

rehash

Depuis la page de manuel: 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
la source
1
De quel OS parlez-vous?
rbanffy
rehashou hash -rpour bash est une commande shell disponible sur * nix. Lorsque le shell C démarre, il construit une table de hachage de toutes les commandes de son chemin: chaque nom de commande et son chemin absolu. Ainsi, après avoir lancé un csh en cours d'exécution, si de nouveaux programmes sont ajoutés aux répertoires le long du chemin, vous devez utiliser la commande rehash du shell pour reconstruire sa table de hachage. (cf: docstore.mik.ua/orelly/unix3/upt/ch27_06.htm )
yacc
1

J'ai eu ce problème mais seulement quand j'ai commencé la tmuxsession en utilisant tmuxinator.

Il s'est avéré que c'est parce que j'utilise tmuxinatorde brewau lieu de l'installer en utilisant gem install. Peut-être que l'utilisation chrubyen même temps a également contribué au problème.

p / s: J'ai également supprimé les rubis inutilisés de ~/.gem/rubymais je doute que ce soit la raison pour laquelle ce problème a été résolu pour moi.

Amree
la source
1

L'exécution gem pristine --alln'a pas aidé au début, mais j'ai ensuite réalisé: le script que j'exécutais commençait par la ligne:

#!/usr/bin/ruby

Sur mon système macOS (Catalina, mais je ne pense pas que cela compte), cela pointe vers le Ruby fourni avec le système, pas celui installé par RVM. L'exécution gem pristine --allréparait l'installation de RVM, mais mon script appelait une version différente de Ruby.

Le correctif pour moi était d'utiliser la envcommande pour appeler le Ruby spécifié dans le shell actuel PATH. La modification de la ligne supérieure du script a résolu le problème:

#!/usr/bin/env ruby

Dave Ceddia
la source
Cela m'est arrivé - merci! Cela signifie que bundle installinstallé les gemmes (et leurs extensions natives) pour un ruby ​​sélectionné via le sélecteur RVM Ruby, où un script faisant référence au système Ruby ne peut pas les trouver. Votre solution est la pratique standard pour faire fonctionner les scripts et les gemmes Ruby avec les rubis installés par l'utilisateur ( voir ).
tanius le
Cela m'a mis sur la bonne voie! Dans mon cas, je voulais que tmuxinator soit un utilitaire (et non un dépôt groupé pour un projet spécifique), donc je l'ai installé sur Ubuntu. Alors faire apt purge tmuxinatoret ensuite gem install tmuxinatorfait fonctionner. Je vais probablement devoir l'installer par gemme chaque fois que je mets à niveau ma version ruby ​​hors projet, mais j'aime mieux ça. Merci!
labyrinthe
1

Exécution de Mac OS Catalina, brew et rbenv ...

Après avoir rencontré ce problème exact aujourd'hui et parcouru toutes les réponses ici, je suis finalement tombé sur une autre raison de cette erreur:

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

Et bien sûr, le bijou vierge n'a pas fonctionné.

Mon problème était un codé en dur des variables d'environnement GEM_HOME et GEM_PATH qui remplaçaient rbenv.

Vérifiez donc que vous n'avez pas défini GEM_PATH et GEM_HOME dans ~ / .zshrc

Tomm P
la source
0

La désinstallation et la réinstallation de Vagrant fonctionnent également. Il y a un unistall.toolscript bash inclus dans l'image .dmg du programme d'installation qui supprimera Vagrant.

J'ai trouvé cette solution ici: Mise à jour des extensions Vagrant et Gems non intégrées

Jeff Wigal
la source
0

J'ai eu le même problème et j'utilise rbenv. Pour une raison quelconque, mon paramètre global rbenv a disparu. Afin de résoudre ce problème, j'ai défini la version globale sur l'une de mes versions de rbenv ... par exemple:

rbenv global 2.5.1

Eric Jones
la source
0

C'est également un problème lorsque vous développez sur Mac, puis créez une image Docker: https://forums.aws.amazon.com/thread.jspa?messageID=879802&tstart=0

Lorsque vous effectuez une "installation groupée - déploiement", le groupeur créera un répertoire fournisseur contenant vos gemmes. Notez que même si cela inclut vos gemmes dans le dossier local, il n'inclura que les extensions natives de votre plate-forme. Comme vous êtes sur macOS, ce sera Darwin. Vous devrez répéter le processus sur un environnement Linux x86 64 bits.

NorseGaud
la source
0

La suggestion de Libby de simplement commencer une nouvelle session terminale (qu'elle a commentée sur la réponse de Sebastian Kim) a fonctionné pour moi. Beaucoup plus rapide que tous les autres aussi, donc je voulais en faire une réponse pour qu'elle soit plus visible.

Jim
la source
0

Sur mon cas, j'essayais de courir pristine --allmais j'obtenais:

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) 

Ensuite, j'ai supprimé le contenu Users/{{user.name}}⁩/⁨.gem⁩alors que je devais l'exécuter bundle install --force, il a tout réinstallé, puis la commande a pristine --allfonctionné comme prévu

Luisa Hernández
la source
0

Cette solution a fonctionné pour moi pour RubyMine IntelliJ

J'avais deux terminaux différents utilisés et RVMet ruby<Version>.

Solution:

J'ai dû passer à la version RVM pour que les erreurs disparaissent Preferences>Languages&Frameworks>Ruby SDK

Les erreurs:

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

entrez la description de l'image ici

Roger Perez
la source