find_spec_for_exe ': impossibile trovare gem bundler (> = 0.a) (Gem :: GemNotFoundException)


228

Ho usato sudo bundle installe quella potrebbe essere la causa del problema?

Adesso ho:

  • gem -v 2.6.14
  • ruby -v ruby 2.3.5p376 (14/09/2017 revisione 59905) [x86_64-darwin15]
  • jekyll -v jekyll 3.6.2
  • bundle -vBundler versione 1.16.0.pre.3

Ricevo il seguente errore quando provo a eseguire bundle exec jekyll serveo semplicementejekyll serve

/Users/myusername/.rvm/rubies/ruby-2.3.5/lib/ruby/site_ruby/2.3.0/rubygems.rb:271:in `find_spec_for_exe': can't find gem bundler (>= 0.a) (Gem::GemNotFoundException)
    from /Users/myusername/.rvm/rubies/ruby-2.3.5/lib/ruby/site_ruby/2.3.0/rubygems.rb:299:in `activate_bin_path'
    from /Users/myusername/.rvm/gems/ruby-2.3.5/bin/bundle:23:in `<main>'
    from /Users/myusername/.rvm/gems/ruby-2.3.5/bin/ruby_executable_hooks:15:in `eval'
    from /Users/myusername/.rvm/gems/ruby-2.3.5/bin/ruby_executable_hooks:15:in `<MacBooMacBook-MacBook-MacBook-Pro-MacBook-PrMacBook-MacBooMacBMaMacBMaMaMaMaMaMaMaMaMacBMaMaMaMacBMa

Inoltre, quando accedo alla cartella in cui ho il mio blog cd my_pathricevo il seguente messaggio:

VM ha utilizzato il tuo Gemfile per selezionare Ruby, va tutto bene - anche Heroku lo fa, puoi ignorare questi avvisi con "rvm rvmrc warning ignore / Library / WebServer / Documents / blog / Gemfile". Per ignorare l'avviso per tutti i file, eseguire "rvm rvmrc warning ignore allGemfiles". Versione dell'interprete ruby ​​sconosciuta (non so come gestirla): RUBY_VERSION.

Non ho idea di come risolverlo. Voglio solo creare il mio blog statico e onestamente non ho idea di Ruby, Gem o Bundle :) Quindi apprezzerei alcune intuizioni!


Può questo aiutare forse: github.com/rvm/rvm/issues/1860
Cyzanfar

@Cyzanfar grazie per questo! L'ho provato, ora ho ricevuto un nuovo errore nel processo: stackoverflow.com/questions/47035080/…
Alvaro

Risposte:


374

Il problema nel mio caso è che il Gemfile.lockfile aveva una BUNDLED_WITHversione 1.16.1e una versione gem install bundlerinstallata 2.0.1, quindi c'era una mancata corrispondenza di versione quando si cercava di correggere la cartella

gem install bundler -v 1.16.1 aggiustato

Naturalmente, è possibile anche modificare le Gemfile.lock's BUNDLED_WITHcon ultima bundlerversione e utilizzare il software di recente, come Sam3000 suggerisce


16
In alternativa, potresti voler cambiare la BUNDLED_WITHversione all'ultima versione del bundler. Questo ha funzionato per me e mi ha anche risparmiato la necessità di software obsoleto :)
codificato

5
Bundler 2 è appena stato rilasciato, quindi se non specifichi come sopra nel tuo Dockerfile, colpirai questo errore bundler.io/blog/2019/01/03/announcing-bundler-2.html
cameck

Ciao @ antonio-tapiador Ho questo problema, ma sono su Windows (non posso passare a Linux). Ho eseguito gem install bundler -v 1.16.1e ora se corro gem.bat list bundler ottengo bundler (2.0.1, 1.16.1, 1.9.6). Non posso cambiare la versione attuale: l'esecuzione bundle.bat _1.16.1 installmi dà questo errore: Could not find command "_1.16.1". Hai qualche idea, quindi non devo creare una nuova domanda? Grazie!
Tedesco

Non importa, mi mancava un trattino basso alla fine della versione.
Tedesco

Grazie. Questo risolve anche il mio stesso problema usando ruby ​​v2.5.1p57
widi83

136
gem update --system

aggiornerà i rubygem e risolverà il problema.


3
Giusto per chiarire - come sottolinea @noraj - il problema è stato introdotto nella nuova versione di bundler. Se segui il collegamento, la soluzione è aggiornare RubyGems.
ReggieB

1
gem update --systemha funzionato per me: ruby 2.5.0 , bundler 2.0.1 , macOS 10.13.6 .
Jagdeep Singh

@ReggieB: Quale collegamento?
Teekin


77

Aggiornare:

Secondo la risposta di @ noraj e il commento di @Niels Kristian, il seguente comando dovrebbe fare il lavoro.

gem update --system
bundle install

Ho scritto questo nel caso qualcuno si imbattesse in un problema come il mio.

gem install bundler mostra che tutto si installa bene.

Fetching: bundler-1.16.0.gem (100%)
Successfully installed bundler-1.16.0
Parsing documentation for bundler-1.16.0
Installing ri documentation for bundler-1.16.0
Done installing documentation for bundler after 7 seconds
1 gem installed

Quando ho digitato bundlesi è verificato un errore:

/Users/nikkov/.rvm/gems/ruby-2.4.0/bin/bundle:23:in `load': cannot load such file -- /Users/nikkov/.rvm/rubies/ruby-2.4.0/lib/ruby/gems/2.4.0/gems/bundler-1.16.0/exe/bundle (LoadError)
    from /Users/nikkov/.rvm/gems/ruby-2.4.0/bin/bundle:23:in `<main>'
    from /Users/nikkov/.rvm/gems/ruby-2.4.0/bin/ruby_executable_hooks:15:in `eval'
    from /Users/nikkov/.rvm/gems/ruby-2.4.0/bin/ruby_executable_hooks:15:in `<main>'

E nella cartella /Users/nikkov/.rvm/rubies/ruby-2.4.0/lib/ruby/gems/2.4.0/gems/non c'era una bundler-1.16.0cartella.

L'ho risolto consudo gem install bundler


6
Dopo averlo "riparato", assicurati di correggere i permessi della directory su .rvm e .gem
umanità

1
@umanity spiega più dettagliatamente per favore, acquista modificando la mia risposta
Nik Kov

1
@humanity chrs per la tua risposta: saresti in grado di elaborare cosa intendi per correggere i permessi di directory su .rvm e .gem?
BKSpurgeon

1
@Nik kov la posizione delle cartelle .rvm e .gem sono probabilmente all'interno della tua cartella home. Prova a cambiare i loro permessi con il comando chmod. Ha funzionato per me.
Souravirus

4
sudo gem install è una cattiva pratica, nel caso normale tutte le installazioni gem dovrebbero funzionare senza sudo
Dmitry Shvetsov

33

La vera risposta è qui se provi a installare il bundler 2.0.1 o 2.0.0 perché Bundler richiede RubyGems v3.0.0

Ieri ho rilasciato Bundler 2.0 che ha introdotto una serie di modifiche importanti. Una di queste modifiche è stata l'impostazione di Bundler per richiedere RubyGems v3.0.0. Dopo aver rilasciato il rilascio, è diventato chiaro che molti dei nostri utenti stanno riscontrando problemi con Bundler 2 che richiedono una versione davvero nuova di RubyGems.

Abbiamo ascoltato attentamente il feedback degli utenti e abbiamo deciso di ridurre il requisito di RubyGems alla v2.5.0 come minimo. Abbiamo rilasciato una nuova versione Bundler, v2.0.1, che regola questo requisito.

Per maggiori informazioni, vedere: https://bundler.io/blog/2019/01/04/an-update-on-the-bundler-2-release.html


1
Grazie, il tuo link mi ha risparmiato un po 'di tempo dal cercare su Google il problema
Ilya Konyukhov

Capistrano stava fallendo su una nuova macchina ma non su quelle vecchie. Questo ha risolto il problema per me.
CWitty,

1
Non può essere "la vera risposta" alla domanda dell'OP perché Bundler 2.0 non esisteva nel 2017, sebbene le persone troveranno sicuramente questa pagina perché i sintomi sono gli stessi.
Philihp Busby

Riscontro il problema con il bundler 2.0.1
Fabrizio Bertoglio

Ecco altre modifiche sostanziali nella versione 2.0.0: github.com/bundler/bundler/releases/tag/v2.0.0
Joshua Pinter

33

Questo lo ha risolto:

  1. Rimuovere Gemfile.lock rm Gemfile.lock
  2. correre di bundle installnuovo

EDIT: NON FARLO IN PRODUZIONE!

Per la produzione vai a questa risposta: https://stackoverflow.com/posts/54083113/revisions


Sto usando Visual Studio Code e sto caricando e pubblicando tramite Azure Devops, che è il punto in cui non funzionava su Build., Ho appena eliminato il file di blocco localmente, eseguito il commit e quindi eseguito il push. La build non funzionava nel passaggio Installa gemme, ma ora funziona.
David Jones

4
Per un progetto di produzione esistente questa è un'idea terribile. Finirai per installare un mucchio di nuovo codice non testato (con il tuo sistema).
Intenti

Sì, questa è una cattiva idea e non dovrebbe essere considerata una soluzione. Dimostra che l'altra risposta (sull'avere una versione Bundler non corrispondente) è corretta. L'installazione della versione corretta di Bundler dovrebbe risolverlo.
Robin Daugherty

Grazie @RobinDaugherty, ho modificato la risposta per avvertire tutti di non farlo in produzione.
Klonept

Anche questo non dovrebbe essere fatto durante lo sviluppo. C'è una buona ragione per il file di blocco, non dovrebbe essere eliminato in un progetto esistente. L'installazione della versione corretta del bundler sulla tua macchina risolve il problema, l'eliminazione Gemfile.lockdovrebbe essere considerata l'ultima risorsa poiché può portare ad altri problemi.
Robin Daugherty

20

Il motivo è il tuo attuale ambiente ruby, hai una versione diversa del bundler con la versione in Gemfile.lock.

  • Modo sicuro, installa il bundler con la stessa versione in Gemfile.lock, questo non interromperà nulla se è accaduto qualcosa in modo incampabile.
  • Modo difficile, rimuovilo Gemfile.locked esegui bundle install.

2
Grazie per quello. Sicuramente tutti dovrebbero usare la versione sicura per non rovinare l'ambiente con gemme appena non testate . Per installare il bundler con una versione specifica, ad esempio 1.17usagem install bundler -v 1.17
anka

12

Se hai cambiato la versione di ruby ​​che stai utilizzando rvm use, rimuovi Gemfile.lock e riprova.


7

per installare il bundler che corrisponde al tuo Gemfile.lockutilizzo:

gem install bundler -v "$(grep -A 1 "BUNDLED WITH" Gemfile.lock | tail -n 1)"

2
salvato il giorno uomo! grazie Naser!
Gaurav

4

Apri Gemfile.lock, che si trova nella radice della cartella della tua app. Scorri fino alla fine del file e guarda la versione del bundler utilizzata. Quindi assicurati di installare la versione del bundler utilizzata:

gem install bundler -v x.xx.xx

Oppure eliminare Gemfile.lock e il bundle se è installata una versione del bundler superiore.

La scelta è tua, amico mio.


3
Non consiglierei di eliminare Gemfile.lock perché ciò aggiornerà anche tutte le gemme. Questo può portare a enormi problemi.
Sandro L

@SandroL - totalmente d'accordo con la tua dichiarazione. Tuttavia, è un'opzione per coloro che sono amanti del rischio e attratti dal dramma.
Georg Keferböck

Grazie. L'installazione della versione che avevo nella Gemfile.lockcartella ha funzionato!
avventuriero in codice il

1

Nel mio caso i suggerimenti di cui sopra non hanno funzionato per me. Il mio era uno scenario leggermente diverso.

Quando ho provato a installare bundlerusando gem install bundler.. Ma stavo ottenendo

ERROR:  While executing gem ... (Gem::FilePermissionError)
    You don't have write permissions for the /Library/Ruby/Gems/2.3.0 directory.

poi ho provato a usare sudo gem install bundlerpoi stavo ottenendo

ERROR:  While executing gem ... (Gem::FilePermissionError)
  You don't have write permissions for the /usr/bin directory.

poi ho provato con sudo gem install bundler -n /usr/local/bin(Basta /usr/binlavorare nel mio caso).

E poi installato con successo bundler

EDIT: Uso MacOS, forse /usr/binnon funziona per me per questo motivo ( https://stackoverflow.com/a/34989655/3786657 commento)


0

Oggi ho avuto lo stesso problema. Risolvo questo problema rimuovendo qualsiasi PATHin .bashrcper anziani rvm.


1
Mi hai salvato, avevo export PATH = "$ PATH: $ HOME / .rvm / bin" nel mio bashrc, lo rimuovo e funziona
bormat

0

Il mio problema era che stavo usando RVM e avevo attivato la versione Ruby sbagliata ...

Spero che questo aiuti almeno una persona


0

Aggiungendo alle molte risposte, il mio problema derivava dal voler utilizzare il ruby ​​del docker come base, ma poi utilizzare rbenv in cima. Questo rovina molte cose.

L'ho risolto in questo caso da:

  • La versione Gemfile.lock necessitava di un aggiornamento: la modifica di "BUNDLED WITH" alla versione più recente ha fatto cambiare a un certo punto il messaggio di errore, quindi potrebbe essere stato necessario
  • in .bash_profile o .bashrc, annullando le variabili d'ambiente:
unset GEM_HOME
unset BUNDLE_PATH

Dopodiché, rbenv ha funzionato bene. Non sono sicuro di come quelle env vars siano state caricate in primo luogo ...



-2

Ho dovuto fare rake clean --force. Poi ha fatto gem install rakee così via.

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.