GEM wird ignoriert, da seine Erweiterungen nicht erstellt wurden

132

Ich habe Ruby kürzlich sowohl auf meinem Arbeits- als auch auf meinem Heimcomputer mit 2.3.1 aktualisiert ruby-install. Ich benutze chrubyals mein Ruby Switcher.

Ich sah diese Warnung in meinem 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

Auf meiner Arbeit, Computer, war die Liste viel länger, aber leicht zu lösen. Als ich den Vorschlag ausprobierte gem pristine GEM, sagte er mir, dass er den Edelstein nicht finden konnte, also rannte ich los gem install GEMund das löste ihn.

Zu Hause funktioniert nichts.

Dinge, die ich aus gesundem Menschenverstand und verschiedenen anderen Stack-Fragen ausprobiert habe:

  • gem pristine GEM
  • gem pristine --all
  • Deinstallation und Neuinstallation des Edelsteins
  • gem update
  • gem update --system
  • bundle update
  • Deinstallation und Neuinstallation bundler
  • Deinstallation und Neuinstallation rails(Dies ist jedoch kein Rails-spezifisches Problem.)
  • Löschen ~/.bundle/
  • Öffnen XCodeund Installieren einiger Erweiterungen (Es musste ausgeführt werden, aber es wurde nichts behoben.)
  • Laufen brew doctorund Lösen aller kleinen Probleme, dann brew updateundbrew upgrade
  • gem install curb (Ich kann mir nicht vorstellen, was dieses Juwel mit diesem Problem zu tun hat, aber zwei verschiedene Personen haben es als letzten Schritt ihrer Behebung derselben Warnung aufgeführt.)
Phillip Longman
quelle
1
Ich sehe sogar die gleiche Warnung, wenn die Edelsteine ​​nicht installiert sind. Ich habe deinstalliert bcryptund es gab mir immer noch zwei Warnungen.
Phillip Longman
1
Hast du den Bundler aktualisiert? Bei der Deinstallation und Neuinstallation wird nur das verwendet, was sich in Ihrer Gemfile.lock befindet. Bundler ist derjenige, der die Erweiterungen erstellen wird. Außerdem werden in Ihrer Ausgabe mehrere Versionen von Edelsteinen aufgelistet, sodass Sie wissen sollten, dass dies für diese Version von Ruby systemweit ist (was bedeutet, dass Sie mehrere Edelsteine ​​neu erstellen müssen).
Anthony
Ich war in meinem Home-Ordner, kein Rails-Projekt, also gab es kein Gemfile.
Phillip Longman
Das gleiche Problem ist mir passiert (mit rvm). gem pristine --allfunktioniert nicht. Gelöst durch Löschen aller Edelsteine ​​einschließlich Bundler. Dann installierte Bundler gem install bundlerund navigierte schließlich zurück zu meinem Projekt und lief, bundle installdie alle meine Edelsteine ​​neu installiert und alles funktioniert
David Watson
In meinem Fall wurde es durch eine vim-Erweiterung verursacht. Ich habe alias vim = "rvm use system do vim" verwendet, um das Problem zu umgehen. Aber ich habe die Warnung erst gesehen, als ich vim verlassen habe. Wenn Sie sie in anderen Situationen sehen, trifft dies wahrscheinlich nicht zu.
Brian Deterling

Antworten:

178

Ich bin heute genau auf dieses Problem gestoßen - Warnungen wie diese für Edelsteine, die noch nicht einmal installiert waren!

... Nun stellt sich heraus , die Edelsteine wurden installiert - für einen anderen Rubin als die, die ich mit chruby (2.2.3 vs 2.3.1) aktiv gesetzt hatte.

Das gem pristine --allProblem wurde behoben, indem zu den verschiedenen Rubinen gewechselt und auf allen ausgeführt wurde.

Sevenseacat
quelle
2
Dies funktionierte für mich nur auf dem aktuellen Rubin (ich benutze rvm). Vielleicht verhindert dies, dass jemand zu viel aufräumt;)
Sandro L
1
Manchmal gem pristine --allnützt es nichts. Sehen Sie diese Antwort auf Fragen Sie für weitere Informationen anders.
GDP2
Wenn gem pristine --allBerechtigungsprobleme vorliegen, sollten Sie dies überprüfen which ruby. brew link --overwrite ruby && source ~/.bash_profileund laufen gem pristine --allkann helfen
Chris Yim
Keine dieser Lösungen funktioniert für mich und ich habe das gleiche Problem.
Alex Cohen
19

Ich bin auf dieses Problem gestoßen und habe dieselben Befehle wie oben befolgt, sogar alle meine zuvor installierten Ruby-Versionen entfernt. Der Fehler blieb jedoch bestehen.

Es stellte sich heraus, dass einige Edelsteine ​​für die verschiedenen (zuvor deinstallierten) Versionen in übrig waren ~/.gem/ruby/. Nachdem ich die nicht mehr verwendeten Ordner entfernt hatte, verschwanden die Fehler.

opes
quelle
2
Das hat es für mich getan. rm -rf. Ich hatte zuvor erfolglos versucht, alle meine Edelsteine ​​makellos zu installieren.
StevenNunez
10

Ich hatte dieses Problem auch heute und es war frustriert, weil ich nicht tippen konnte, weil mein gesamter Editor mit Fehlermeldungen rot blinkte.

Ich bin mir nicht ganz sicher, was genau es verursacht hat, aber ich glaube, es liegt daran, dass wir mehrere Ruby-Versionen ODER mehrere Ruby-Versionsmanager installiert haben und diese sich gegenseitig überschreiben und ansonsten Ihre Wege zu den Edelsteinen durcheinander bringen.

Der gemBefehl wird auch überschrieben, wenn Sie rbenv und rvm haben.

Sehen Sie, welche Sie installiert haben, indem Sie Folgendes eingeben.

which rvm
which rbenv
which chruby

Wenn einer davon installiert ist, wird ein Pfad zurückgegeben. Löschen Sie sie dann, stellen Sie sicher, dass alle Verzeichnisse vollständig bereinigt sind, und beginnen Sie mit einer Neuinstallation.


Entfernen

Folgendes habe ich für rvm getan :

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

Folgendes habe ich für rbenv getan

Zuerst https://github.com/meowsus/rbenv-clean installiert , dann

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

Neu installieren

Dann haben Sie ein sauberes Home-Verzeichnis, von dem aus Sie arbeiten können. Ich habe rbenv mit How to install Ruby 2.1.4 unter Ubuntu 14.04 neu installiert . Und schlussendlich;

rbenv rehash
Simon Somlai
quelle
Nur das Entfernen der rvm-bezogenen Sachen hat dieses Problem für mich unter macOS
behoben
6

Ich habe alles oben erwähnte gemacht, einschließlich

  • xcode-select --install
  • Ruby neu installieren
  • Installiere alle Edelsteine ​​neu
  • Edelstein makellos - alles

aber das Problem war das gleiche für mich. Ich habe gerade meinen Mac als letzte Hoffnung neu gestartet und die Warnmeldungen sind verschwunden.

Seltsam, aber wenn jemand mit diesem Problem zu kämpfen hat, nachdem er alles in StackOverflow ausprobiert hat, starten Sie Ihren Computer neu.

Sebastian Kim
quelle
4
Vielen Dank, dass Sie den Neustart-Tipp geteilt haben. Ich hatte das gleiche Problem auf einem Mac und konnte es lösen, indem ich einfach eine neue Terminalsitzung startete.
Libby
3

Wenn Sie RVM installiert haben, tritt der Fehler möglicherweise auf, weil Sie verschiedene Versionen installiert haben.

Überprüfen und entfernen Sie nutzlose Versionen, aber ich denke, dies ist kein guter Ansatz. Sowieso Fehler weg.

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

Nach dem Auffrischen der Cocoapods sollte es in .rvm GEM_HOME injiziert werden

gem uninstall cocoapods
gem install cocoapods

Wahrscheinlich pod COMMANDwird der Fehler über minitestEdelstein werfen , also -gem install minitest

Dimpiax
quelle
2

TL; DR - Ruby-Edelsteine ​​mögen keine Rubine, die über Symlinks ausgeführt oder von ihrem Standort verschoben werden (aufgrund eingebetteter Shebangs).

Wenn das Ruby-Verzeichnis aufgerufen wird oder Umgebungsvariablen auf ein mit Symlinks versehenes Verzeichnis verweisen oder kopiert oder umbenannt werden, ist diese Meldung wahrscheinlich. Ich benutze chruby und habe eine Verknüpfung hergestellt /opt/rubies/-> /usr/local/ruby/, aber Rubys dynamische Logik zum Finden von Bibliotheken spielt damit nicht gut.

In meinem Fall bestand die Lösung darin, den Symlink durch tatsächliche Rubine zu ersetzen /opt/rubies/und gem pristine --allin jedem Rubin auszuführen . Für andere, die RVM oder Rbenv verwenden, viel Glück damit, ohne von vorne zu beginnen.

Dies ist möglicherweise nicht Ihr genaues Problem, aber es hilft hoffentlich.


quelle
1
Es stellte sich heraus, dass sie gem pristine --allalle am Laufen waren . Vielen Dank, dass Sie diese tote Frage wiederbelebt haben. Ich war kurz davor, alles niederzubrennen und von vorne zu beginnen.
Phillip Longman
2

Hier meinen eigenen Geschmack hinzufügen. Ich verwende rbenvinstalliert über Homebrew und bekam vier dieser "Ignorieren ... Erweiterungen nicht erstellt" -Nachrichten. Speziell:

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

Ich habe viele Dinge in diesem Thread ohne Glück ausprobiert. Schließlich habe ich in meinem Fall:

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

Zu diesem Zeitpunkt bekam ich immer noch die Fehler, aber jetzt hatte ich nur noch eine einzige Ruby-Version, mit der ich fertig werden konnte:

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

Zu diesem Zeitpunkt habe ich es versucht sudo gem pristine --all, wurde jedoch für Berechtigungen für das Gems-Verzeichnis des Systems abgelehnt.

Also ging ich durch und lief makellos auf jedem Edelstein, wie

sudo gem pristine bcrypt --version 3.1.12 (etc)

Und schließlich waren die Fehler weg.

wrydere
quelle
1

Dies ist ein alter Thread, aber ich bin gerade selbst auf dieses Problem gestoßen.

Sie müssen Ihren Computer nicht neu starten, sondern nur Ihre Umgebung aktualisieren. Dies können Sie mit dem Befehl rehash tun:

rehash

Von der Manpage: 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
quelle
1
Über welches Betriebssystem sprichst du?
Rbanffy
rehashoder hash -rfür bash ist ein Shell-Befehl, der auf * nix verfügbar ist. Wenn die C-Shell gestartet wird, erstellt sie eine Hash-Tabelle aller Befehle in ihrem Pfad: jeden Befehlsnamen und seinen absoluten Pfadnamen. Wenn Sie also nach dem Starten einer csh-Ausführung neue Programme zu Verzeichnissen entlang des Pfads hinzufügen, müssen Sie den Rehash-Befehl der Shell verwenden, um ihre Hash-Tabelle neu zu erstellen. (vgl.: docstore.mik.ua/orelly/unix3/upt/ch27_06.htm )
yacc
1

Ich hatte dieses Problem, aber nur, als ich mit der tmuxSitzung begann tmuxinator.

Es stellte sich heraus, dass ich tmuxinatorvon verwende, brewanstatt es mit zu installieren gem install. Vielleicht hat chrubydie gleichzeitige Verwendung auch zum Problem beigetragen.

p / s: Ich habe auch nicht verwendeten Rubin entfernt, ~/.gem/rubyaber ich bezweifle, dass dies der Grund ist, warum dieses Problem für mich behoben wurde.

Amree
quelle
1

Das Laufen gem pristine --allhalf zuerst nicht, aber dann wurde mir klar: Das Skript, das ich ausführte, begann mit der Zeile:

#!/usr/bin/ruby

Auf meinem macOS-System (Catalina, aber ich denke nicht, dass es wichtig ist) weist dies auf den Ruby hin, der mit dem System geliefert wurde, nicht auf den von RVM installierten. Beim Ausführen gem pristine --allwurde die RVM-Installation repariert, aber mein Skript rief eine andere Version von Ruby auf.

Die Lösung für mich bestand darin, mit dem envBefehl den Ruby aufzurufen, der in der aktuellen Shell angegeben ist PATH. Durch Ändern der obersten Zeile des Skripts wurde Folgendes behoben:

#!/usr/bin/env ruby

Dave Ceddia
quelle
Ist mir gerade passiert - danke! Dies bedeutet, dass bundle installdie Edelsteine ​​(und ihre nativen Erweiterungen) für einen Ruby installiert wurden, der über den RVM Ruby-Umschalter ausgewählt wurde, wobei ein Skript, das auf das System Ruby verweist, sie nicht finden kann. Ihre Lösung ist die Standardpraxis, um Ruby-Skripte und Gems mit vom Benutzer installierten Rubinen arbeiten zu lassen ( siehe ).
Tanius
Das hat mich auf den richtigen Weg gebracht! In meinem Fall wollte ich, dass tmuxinator ein Util ist (kein gebündeltes Dep für ein bestimmtes Projekt), also habe ich es auf Ubuntu installiert. Also mach es apt purge tmuxinatorund dann gem install tmuxinatorhat es funktioniert. Ich werde es wahrscheinlich immer dann installieren müssen, wenn ich meine Nicht-Projekt-Ruby-Version aktualisiere, aber das gefällt mir besser. Vielen Dank!
Labyrinth
1

Mac OS Catalina ausführen, brauen und rbenv ...

Nachdem ich heute genau auf dieses Problem gestoßen bin und alle Antworten hier durchgesehen habe, bin ich schließlich auf einen anderen Grund für diesen Fehler gestoßen:

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

Und natürlich hat Edelstein makellos keine Arbeit geleistet.

Mein Problem waren fest codierte Umgebungsvariablen GEM_HOME und GEM_PATH, die rbenv überschrieben.

Stellen Sie also sicher, dass Sie GEM_PATH und GEM_HOME nicht in ~ / .zshrc festgelegt haben

Tomm P.
quelle
0

Ich hatte das gleiche Problem und verwende rbenv. Aus irgendeinem Grund ist meine globale Rbenv-Einstellung verschwunden. Um dieses Problem zu beheben, habe ich die globale Version auf eine meiner rbenv-Versionen gesetzt ... zum Beispiel:

rbenv global 2.5.1

Eric Jones
quelle
0

Dies ist auch ein Problem, wenn Sie auf einem Mac entwickeln und dann ein Docker-Image erstellen: https://forums.aws.amazon.com/thread.jspa?messageID=879802&tstart=0

Wenn Sie eine "Bundle-Installation - Bereitstellung" durchführen, erstellt der Bundler ein Herstellerverzeichnis mit Ihren Edelsteinen darin. Beachten Sie, dass dies zwar Ihre Edelsteine ​​im lokalen Ordner enthält, jedoch nur die nativen Erweiterungen für Ihre Plattform. Wenn Sie unter macOS arbeiten, ist dies Darwin. Sie müssen den Vorgang in einer 64-Bit-x86-Linux-Umgebung wiederholen.

NorseGaud
quelle
0

Libbys Vorschlag , gerade eine neue Terminalsitzung zu starten (die sie zu Sebastian Kims Antwort kommentierte), hat für mich funktioniert. Viel schneller als alle anderen auch, also wollte ich es zu einer Antwort machen, damit es sichtbarer ist.

Jim
quelle
0

In meinem Fall habe ich versucht zu rennen, pristine --allaber ich bekam:

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) 

Dann habe ich den Inhalt gelöscht, Users/{{user.name}}⁩/⁨.gem⁩als ich ihn ausführen musste bundle install --force, alles neu installiert, dann hat der Befehl pristine --allwie erwartet funktioniert

Luisa Hernández
quelle
0

Diese Lösung hat bei RubyMine IntelliJ funktioniert

Ich hatte zwei verschiedene Terminals und RVMund ruby<Version>.

Lösung:

Ich musste es auf die RVM-Version umstellen, damit die Fehler behoben wurden Preferences>Languages&Frameworks>Ruby SDK

Fehler:

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

Geben Sie hier die Bildbeschreibung ein

Roger Perez
quelle