Ruby unter OS X 10.9 Ignoriert Edelsteine, da keine Erweiterungen erstellt werden

Alle paar Tage passiert dies, wenn Sie verschiedene Dinge in Ruby CLI (insbesondere mit dem knifeDienstprogramm für Chef) unter OS X tun (keine Replikation in anderen Umgebungen möglich; Linux, FreeBSD usw.):

Ignoring bcrypt-3.1.7 because its extensions are not built.  Try: gem pristine bcrypt-3.1.7
Ignoring bigdecimal-1.2.5 because its extensions are not built.  Try: gem pristine bigdecimal-1.2.5
Ignoring ffi-yajl-1.1.0 because its extensions are not built.  Try: gem pristine ffi-yajl-1.1.0
Ignoring gem-wrappers-1.2.5 because its extensions are not built.  Try: gem pristine gem-wrappers-1.2.5
Ignoring gem-wrappers-1.2.4 because its extensions are not built.  Try: gem pristine gem-wrappers-1.2.4
Ignoring pg-0.17.1 because its extensions are not built.  Try: gem pristine pg-0.17.1
Ignoring psych-2.0.6 because its extensions are not built.  Try: gem pristine psych-2.0.6
Ignoring sqlite3-1.3.9 because its extensions are not built.  Try: gem pristine sqlite3-1.3.9

Und obwohl es eine einfache Lösung ist, passiert es immer wieder. Ist jemandem das schon mal begegnet?

$ ruby -v
ruby 1.9.3p484 (2013-11-22 revision 43786) [x86_64-darwin11.2.0]

Antworten (9)

Ich habe kürzlich von rvmzu gewechselt chrubyund bin gelaufen gem update --system, als das Problem bei mir auftrat. Danach wurde ich jedes Mal, wenn ich Bündel lief, mit denselben Warnungen geschlachtet. Immer noch nicht sicher, was das Problem verursacht hat.

Ignoring curb-0.8.6 because its extensions are not built. Try: gem pristine curb-0.8.6

Ich bin mir nicht sicher, was es behoben hat, aber ich habe zwei Dinge getan und die Warnung ist verschwunden:

gem uninstall bundler
gem install bundler

gem install curb
Seltsamerweise fing es bei mir an, als ich von dem mit OS X gebündelten Ruby zu RVM wechselte. Im Allgemeinen löscht es sich nach ein paar Tagen von selbst oder wenn ich eine neue Sitzung eröffne (was ziemlich mühsam ist, wenn es mittags auftritt). Normalerweise muss ich alles neu installieren, was ich zu einem bestimmten Zeitpunkt verwende, und das ist normalerweise Knife.
Es geschah für Dutzende von Edelsteinen auf meiner Maschine. Ich denke, sie mussten einfach umgebaut werden
Für mich selbst musste ich jedes Juwel deinstallieren, für das es eine Warnung gab, und es dann neu installierenbundle install
"Ich wurde geschlachtet" - wow.
Was auch immer ich versuche, ich bekomme You don't have write permissions for the /Library/Ruby/Gems/2.3.0 directory, diese Probleme begannen von selbst, ich benutze nicht einmal Ruby, soweit ich weiß. Aber ich erhalte Fehlermeldungen über Erweiterungen, für die nicht gebaut wurde, clocale-0.0.3wenn ich eine neue Shell starte

In meinem Fall sehe ich diese Fehler nach der Installationrvm

Ich löse ein solches Problem mit:gem pristine --all

Was für ein nützlicher Befehl
Das hat funktioniert ... Aber ich habe keine Ahnung warum
Bundler deinstallieren und installieren hat nicht funktioniert. Aber dieser hat funktioniert! Danke!
Dies hätte die akzeptierte Antwort sein sollen.

Dieses Problem tritt auf, wenn ein Gem gegen eine andere Libruby kompiliert wurde als die aktuell laufende. Zum Beispiel, wenn man einen Ruby, der sich in seinem Home-Verzeichnis befindet, mit chruby verwendet und Gems nach ~/.gem/ruby installiert, aber ein Skript ausführt, das /usr/bin/ruby aufruft, das die dort installierten Gems wiederverwendet. In diesem Fall gem pristine --allhilft nichts, da die Gems nur gegen eine Ruby-Version gelinkt werden können.

Ahhh danke! Ich habe diesen Fehler beim Ausführen von "rails s" erhalten. Ich wechselte zu "bundle exec rails" und das Problem verschwand.
Dies sollte die akzeptierte Antwort sein
Diese Antwort ist richtig. Wenn das Problem in einem Rails-Repository auftritt, in dem Gems gespeichert sind vendor/bundle, löschen Sie sie einfach mit rm -rf vendor/bundleund installieren Sie sie erneut mit bundle install.
Danke schön. Ich habe es versucht, gem pristine --allbis ich blau im Gesicht war, und jetzt weiß ich, warum es nicht funktioniert hat ...
Notiz an mich selbst - siehe meine neuere Antwort unten für weitere Details: apple.stackexchange.com/a/436672/79496

Ich habe das behoben durch:

rvm get stable

https://github.com/rvm/rvm/issues/3348

Das hat bei mir unter MacOs Sierra funktioniert:

xcode-select --install
gem install nokogiri

Ich hatte bereits den gesamten Xcode installiert, bevor ich die obigen Befehle ausgeführt habe, aber ich musste dies trotzdem tun, vielleicht weil das erste Skript einige interne Bibliotheken/Abhängigkeiten aktualisiert.

Das ist, was ich nach einer MacOS Sierra-Lösung gesucht habe. Danke

Stellen Sie sicher, dass Sie "gem pristine --all" für die richtige Ruby-Version ausführen. Wenn /usr/bin/ruby aufgerufen wird ... verwenden Sie "/usr/bin/gem pristine --all". Dies ist nicht offensichtlich, wenn Sie rvm verwenden und 10 Versionen von Ruby installiert haben.

Das hat mein Problem für einen Tag behoben und dann kam es wieder.

Was eine dauerhaftere Lösung zu sein scheint, ist "rvm reset", damit das Standard-Ruby die installierte OSX-Version /usr/bin/ruby und /usr/bin/gem ist. Wenn ich eine neuere Version von Ruby für ein Projekt verwenden möchte, verwende ich .ruby-version und .ruby-gemset im Projektstammverzeichnis, um explizit die Version von Ruby festzulegen, die ich verwenden möchte. Nicht ideal ... aber es sollte diesen Fehler beseitigen.

In meinem Fall:

rvm get stable

sudo gem pristine --all

Ich bin sehr neu in Rails, daher könnte dies ein völlig fehlgeleiteter Rat sein, aber da keine der anderen Lösungen für mich funktionierte, dachte ich, ich würde meine teilen.

Mic92 und Gerry haben mich auf die richtige Spur gebracht: Ich habe das verwendet, rails swas Fehler verursachen kann, weil es eine Rails-Version ausführt, die eine andere Version als die des Projekts sein kann.

Ich habe versucht, mich mit zu verbinden bin/rails server, ich habe einen anderen Fehler erhalten (fehlende Edelsteine), also bin ich geranntbundle install

An dieser Stelle bekam ich einen dritten Fehler ("inkompatible Bibliotheksversion"), der spring stopgeheilt wurde.

Dann bin ich rails generate controllerwieder gelaufen, Frühling neu gestartet und alles hat funktioniert (ich habe ein bisschen geweint).

Dieser Fehler bedeutet, dass Sie die aktuelle Version des Edelsteins nicht verwenden können. Es wurde mit einer älteren ausführbaren Ruby-Datei installiert und/oder andere Systemdienstprogramme und Binärdateien haben sich geändert, sodass Sie das Gem komplett von Grund auf neu installieren müssen. Das ist mir passiert, als ich von Ruby 2.5.3 auf Ruby 2.7.1 migriert habe. Ich hatte alle meine Edelsteine ​​aus der vorherigen Version übernommen (via rvm migrate), aber sie waren jetzt kaputt. Alle meine Edelsteine ​​mussten gemäß den 2.7.1-Abhängigkeiten neu erstellt werden. Also musste ich alle meine Edelsteine ​​​​über vollständig entfernen rvm gemset empty ruby-2.7.1. In diesem Fall wird eine Liste aller Ihrer installierten Gems gedruckt. Kopieren Sie diese Ausgabe und fügen Sie sie in eine sichere Datei ein, auf die Sie später noch einmal zurückgreifen können, um die Edelsteine ​​neu zu installieren, die Sie benötigen, um eine wirklich saubere Umgebung für Ihre neue Ruby-Version zu installieren.