Ignorando GEM perché le sue estensioni non sono costruite


133

Sia sul mio lavoro che sui computer di casa, ho recentemente aggiornato Ruby alla 2.3.1, usando ruby-install. Uso chrubycome switcher Ruby.

Ho iniziato a vedere questo avviso nel mio terminale:

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

Sul mio lavoro, computer, l'elenco era molto più lungo, ma facile da risolvere. Quando ho provato il suggerimento gem pristine GEM, mi ha detto che non riusciva a trovare la gemma, quindi ho corso gem install GEMe questo l'ha risolto.

A casa, niente funziona.

Cose che ho provato, dal buon senso e da varie altre domande dello Stack:

  • gem pristine GEM
  • gem pristine --all
  • disinstallare e reinstallare la gemma
  • gem update
  • gem update --system
  • bundle update
  • disinstallazione e reinstallazione bundler
  • disinstallazione e reinstallazione rails(anche se non è un problema specifico di Rails.)
  • eliminazione ~/.bundle/
  • aprendolo XCodee lasciandolo installare alcune estensioni (doveva farlo, ma non ha risolto nulla).
  • eseguire brew doctore risolvere tutti i problemi minori, quindi brew updateebrew upgrade
  • gem install curb (Non riesco a immaginare cosa abbia a che fare questo gioiello con questo problema, ma due persone diverse lo hanno elencato come l'ultimo passo della loro correzione con lo stesso avvertimento.)

1
Sto anche vedendo lo stesso avvertimento se le gemme non sono installate. Ho disinstallato bcrypte mi ha ancora dato due avvertimenti al riguardo.
Phillip Longman,

1
hai aggiornato il bundler? la disinstallazione e reinstallazione utilizzerà semplicemente tutto ciò che è presente in Gemfile.lock. Bundler è colui che costruirà le estensioni. Inoltre, il tuo output elenca più versioni di gemme, quindi dovresti sapere che questo è a livello di sistema per quella versione di ruby ​​(il che significa che avrai più gemme da ricostruire).
Anthony,

Ero nella mia cartella home, non in un progetto Rails, quindi non c'era Gemfile.
Phillip Longman,

Lo stesso problema mi è successo (usando rvm). gem pristine --allnon ha funzionato. Risolto eliminando tutte le gemme incluso il bundler. Quindi ho installato il bundler gem install bundlere finalmente sono tornato al mio progetto e ho eseguito il programma bundle installche ha reinstallato tutte le mie gemme e tutto funziona
David Watson,

Nel mio caso, è stato causato da un'estensione vim. Ho fatto alias vim = "rvm usa il sistema do vim" per aggirare il problema. Ma ho visto l'avvertimento solo quando sono uscito da VIM, quindi se lo vedi in altre situazioni, questo probabilmente non si applica.
Brian Deterling,

Risposte:


179

Oggi mi sono imbattuto in questo preciso problema: ho ricevuto avvisi come questo per le gemme che non erano nemmeno state installate!

... Bene, si scopre che le gemme sono state installate - per un rubino diverso da quello che avevo impostato attivo con Chruby (2.2.3 contro 2.3.1).

Il passaggio a tutti i diversi rubini e l'esecuzione gem pristine --allsu tutti risolto il problema.


3
Questo ha funzionato per me facendo questo solo sul rubino attuale (io uso rvm). Forse questo impedisce a qualcuno di fare troppa pulizia;)
Sandro L

1
A volte gem pristine --allnon farà nulla di buono. Vedi questa risposta su Chiedi diverso per maggiori informazioni.
PIL 2

se gem pristine --allha problemi di autorizzazione, è necessario verificare which ruby. brew link --overwrite ruby && source ~/.bash_profileed eseguire gem pristine --allpuò aiutare
Chris Yim,

Nessuna di queste soluzioni funziona per me e ho lo stesso problema.
Alex Cohen,

19

Ho riscontrato questo problema e ho seguito tutti gli stessi comandi di cui sopra, arrivando persino a rimuovere tutte le mie versioni di Ruby precedentemente installate. Tuttavia, l'errore è persistito.

A quanto pare, c'erano alcune gemme rimanenti per le varie versioni (precedentemente disinstallate) di ~/.gem/ruby/. Dopo aver rimosso le cartelle che non utilizzavo più, gli errori sono scomparsi.


2
Questo è stato per me. rm -rf. In precedenza avevo tentato di installare senza problemi tutte le mie gemme.
StevenNunez,

10

Anche oggi ho avuto questo problema ed è frustrato perché non riesco a digitare perché l'intero editor ha lampeggiato in rosso con messaggi di errore.

Non sono del tutto sicuro di cosa l'abbia causato esattamente, ma credo che sia perché abbiamo più versioni di ruby ​​o più gestori di versioni di ruby installati e si sovrascrivono l'un l'altro e altrimenti confondono i tuoi percorsi verso le gemme.

Il gemcomando viene anche sovrascritto quando si hanno rbenv e rvm.

Guarda quali hai installato digitando;

which rvm
which rbenv
which chruby

Se uno di questi è installato, verrà restituito un percorso. Quindi eliminali, assicurati di ripulire completamente tutte le directory e iniziare con un'installazione pulita.


Rimuovere

Ecco cosa ho fatto per rvm ;

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

Ecco cosa ho fatto per rbenv

Prima installato https://github.com/meowsus/rbenv-clean , quindi

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

Reinstallare

Quindi hai una home directory pulita da cui lavorare. Ho reinstallato rbenv con Come installare Ruby 2.1.4 su Ubuntu 14.04 . E infine;

rbenv rehash

La semplice rimozione delle cose relative a rvm ha risolto questo problema per me su macOS
neu242,

6

Ho fatto tutto quanto sopra menzionato

  • xcode-select --install
  • reinstallare ruby
  • reinstallare tutte le gemme
  • gemma incontaminata - tutti

ma il problema era lo stesso per me. Ho appena riavviato il mio Mac come ultima speranza e i messaggi di avviso sono scomparsi.

Strano, ma se qualcuno ha problemi con questo problema dopo aver provato tutto su StackOverflow, prova a riavviare il computer.


4
Grazie per aver condiviso il suggerimento sul riavvio. Ho avuto lo stesso problema, su un Mac, e sono stato in grado di risolvere solo avviando una nuova sessione terminale.
Libby,

3

Se hai installato RVM, probabilmente stai rilevando l'errore perché hai installato versioni diverse.

Controlla e rimuovi versioni inutili, ma penso che questo non sia un buon approccio. Comunque gli errori sono andati.

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

Dopo l'aggiornamento dei cocoapods, dovrebbe essere iniettato in .rvm GEM_HOME

gem uninstall cocoapods
gem install cocoapods

Probabilmente pod COMMANDgenererà l'errore relativo alla minitestgemma, quindi -gem install minitest


2

TL; DR - Alle gemme di rubini non piacciono i rubini che corrono da collegamenti simbolici o si spostano da dove sono stati costruiti (a causa di shebang incorporati)

Se viene invocata la directory Ruby o l'ambiente vars punta a una directory con collegamento simbolico o viene copiato o rinominato, è probabile che questo messaggio. Sto usando chruby ed è stato il collegamento simbolico /opt/rubies/-> /usr/local/ruby/, ma la logica di ricerca della libreria dinamica di Ruby non gioca bene con questo.

La soluzione nel mio caso è stata quella di sostituire il collegamento simbolico con rubini effettivi /opt/rubies/ed eseguire gem pristine --allin ogni rubino. Per altri che usano RVM o Rbenv, buona fortuna senza ricominciare da capo.

Questo potrebbe non essere il problema esatto, ma si spera che aiuti.


1
Si è rivelato essere la corsa gem pristine --allsu tutti loro parte. Grazie per aver resuscitato questa domanda morta. Ero vicino a bruciare tutto e ricominciare da capo.
Phillip Longman,

2

Aggiungendo il mio sapore qui. Uso rbenvinstallato tramite Homebrew e ho ricevuto quattro di questi messaggi "ignorando ... estensioni non costruite". In particolare:

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

Ho provato molte cose in questo thread senza fortuna. Finalmente nel mio caso ho fatto:

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

A questo punto stavo ancora ricevendo gli errori, ma ora avevo solo una singola versione di Ruby con cui combattere:

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

A questo punto ho provato sudo gem pristine --allma sono stato rifiutato per le autorizzazioni sulla directory Gems del sistema.

Così ho attraversato e ho corso su ogni gemma incontaminata, tipo

sudo gem pristine bcrypt --version 3.1.12 (eccetera)

E infine gli errori erano spariti.


1

Questo è un vecchio thread, ma mi sono appena imbattuto in questo problema.

Non è necessario riavviare il computer, è sufficiente aggiornare l'ambiente, è possibile farlo con il comando rehash:

rehash

Dalla pagina man: 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
Di quale sistema operativo stai parlando?
rbanffy,

rehasho hash -rper bash è un comando shell disponibile su * nix. Quando la shell C si avvia, crea una tabella hash di tutti i comandi nel suo percorso: ogni nome di comando e il suo nome di percorso assoluto. Quindi, dopo aver avviato l'esecuzione di un csh, se vengono aggiunti nuovi programmi alle directory lungo il percorso, è necessario utilizzare il comando rehash della shell per ricostruire la sua tabella hash. (cf: docstore.mik.ua/orelly/unix3/upt/ch27_06.htm )
yacc

1

Ho avuto questo problema ma solo quando stavo iniziando la tmuxsessione usando tmuxinator.

Si è rivelata è perché sto usando tmuxinatorda brewinvece di installare usando gem install. Forse l'utilizzo chrubyallo stesso tempo ha contribuito anche al problema.

p / s: ho rimosso anche il rubino inutilizzato ~/.gem/rubyma dubito che sia il motivo per cui questo problema è stato risolto per me.


1

Iniziare l'esecuzione gem pristine --allnon ha aiutato, ma poi ho capito: lo script che stavo eseguendo è iniziato con la riga:

#!/usr/bin/ruby

Sul mio sistema macOS (Catalina, ma non credo sia importante), questo indica il Ruby fornito con il sistema, non quello installato da RVM. L'esecuzione gem pristine --allstava riparando l'installazione di RVM, ma il mio script stava chiamando una versione diversa di Ruby.

La soluzione per me era usare il envcomando per chiamare qualunque Ruby sia specificato nella shell corrente PATH. La modifica della riga superiore dello script in questo ha risolto il problema:

#!/usr/bin/env ruby


Mi è appena successo - grazie! Significa che hanno bundle installinstallato le gemme (e le loro estensioni native) per un rubino selezionato tramite lo switcher Ruby RVM, in cui uno script che si riferisce al sistema Ruby non riesce a trovarle. La tua soluzione è la pratica standard per far funzionare gli script e le gemme di Ruby con i rubini installati dall'utente ( vedi ).
tanius,

Questo mi ha messo sulla strada giusta! Nel mio caso, volevo che tmuxinator fosse un util (non un dep in bundle per un progetto specifico), quindi l'ho installato su Ubuntu. Così facendo apt purge tmuxinatore poi l'ha gem install tmuxinatorfatto funzionare. Probabilmente dovrò installarlo gem ogni volta che aggiorno la mia versione ruby ​​non di progetto, ma mi piace di più. Grazie!
labirinto

1

Esecuzione di Mac OS Catalina, brew e rbenv ...

Avendo riscontrato questo esatto problema oggi, e esaminando tutte le risposte qui alla fine mi sono imbattuto in un'altra ragione per questo errore:

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

E naturalmente gemma incontaminata non ha funzionato.

Il mio problema era una variabile d'ambiente GEM_HOME e GEM_PATH codificata che sovrascriveva rbenv.

Quindi, controlla di non aver impostato GEM_PATH e GEM_HOME in ~ / .zshrc



0

Ho avuto lo stesso problema e sto usando rbenv. Per qualche ragione la mia impostazione globale di rbenv è scomparsa. Per risolvere questo problema ho impostato la versione globale su una delle mie versioni di rbenv ... ad esempio:

rbenv global 2.5.1


0

Questo è anche un problema quando si sviluppa su Mac e quindi si crea un'immagine Docker: https://forums.aws.amazon.com/thread.jspa?messageID=879802&tstart=0

Quando fai un "bundle install --deployment", il bundler creerà una directory del fornitore con le tue gemme. Nota che, sebbene questo includa le tue gemme nella cartella locale, includerà solo le estensioni native per la tua piattaforma. Come sei su macOS questo sarà Darwin. Dovrai ripetere il processo su un ambiente Linux x86 a 64 bit.


0

Il suggerimento di Libby di iniziare una nuova sessione terminale (che ha commentato sulla risposta di Sebastian Kim) ha funzionato per me. Molto più veloce di tutti gli altri, quindi volevo renderlo una risposta in modo che fosse più visibile.


0

Nel mio caso stavo cercando di correre pristine --allma stavo ottenendo:

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) 

Quindi, ho eliminato il contenuto Users/{{user.name}}⁩/⁨.gem⁩quindi, come avevo bisogno di eseguire bundle install --force, ha reinstallato tutto, quindi il comando ha pristine --allfunzionato come previsto


0

Questa soluzione ha funzionato per me per RubyMine IntelliJ

Ho usato due terminali diversi e RVMe ruby<Version>.

Soluzione:

Ho dovuto passare alla versione RVM per far scomparire gli errori Preferences>Languages&Frameworks>Ruby SDK

Errori:

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

inserisci qui la descrizione dell'immagine

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.