find_spec_for_exe ': Gem-Bundler (> = 0.a) kann nicht gefunden werden (Gem :: GemNotFoundException)

217

Ich habe verwendet sudo bundle installund das könnte die Ursache des Problems sein?

Jetzt habe ich:

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

Ich erhalte die folgende Fehlermeldung, wenn ich versuche zu laufen bundle exec jekyll serveoder nurjekyll 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

Wenn ich auf den Ordner zugreife, in dem ich mein Blog cd my_pathhabe, wird folgende Meldung angezeigt:

VM hat Ihr Gemfile für die Auswahl von Ruby verwendet. Es ist alles in Ordnung. Heroku macht das auch. Sie können diese Warnungen mit 'rvm rvmrc warning ignore / Library / WebServer / Documents / blog / Gemfile' ignorieren. Um die Warnung für alle Dateien zu ignorieren, führen Sie 'rvm rvmrc warning ignore allGemfiles' aus. Unbekannte Ruby-Interpreter-Version (weiß nicht, wie ich damit umgehen soll): RUBY_VERSION.

Ich habe keine Ahnung, wie ich das lösen soll. Ich möchte nur mein statisches Blog erstellen und ehrlich gesagt habe ich keine Ahnung von Ruby, Gem oder Bundle :) Ich würde mich über einige Einblicke freuen!

Alvaro
quelle
Kann das vielleicht helfen: github.com/rvm/rvm/issues/1860
Cyzanfar
@ Cyzanfar danke dafür! Ich habe es versucht, jetzt habe ich einen neuen Fehler im Prozess erhalten: stackoverflow.com/questions/47035080/…
Alvaro

Antworten:

363

Das Problem in meinem Fall ist, dass die Gemfile.lockDatei eine BUNDLED_WITHVersion 1.16.1und eine gem install bundlerinstallierte Version hatte 2.0.1, sodass bei der Suche nach dem richtigen Ordner eine Versionsinkongruenz auftrat

gem install bundler -v 1.16.1 behoben

Natürlich können Sie auch Ihre ändern Gemfile.lock‚s BUNDLED_WITHmit der letzten bundlerVersion und aktuelle Software verwenden, wie Sam3000 schlägt vor ,

Antonio Tapiador
quelle
15
Alternativ können Sie die BUNDLED_WITHVersion auf die neueste Version von Bundler ändern . Dies funktionierte für mich und ersparte mir auch die Notwendigkeit veralteter Software :)
Sam3000
5
Bundler 2 wurde gerade veröffentlicht. Wenn Sie also nicht wie oben in Ihrer Docker-Datei angeben, wird dieser Fehler auftreten. Bundler.io/blog/2019/01/03/announcing-bundler-2.html
Cameck
Hi @ antonio-tapiador Ich habe dieses Problem, aber ich bin unter Windows (kann nicht zu Linux wechseln). Ich bin gelaufen gem install bundler -v 1.16.1und jetzt, wenn gem.bat list bundler ich laufe, bekomme ich einen Bundler (2.0.1, 1.16.1, 1.9.6). Ich kann die aktuelle Version nicht ändern: Das Ausführen bundle.bat _1.16.1 installgibt mir diesen Fehler : Could not find command "_1.16.1". Haben Sie eine Idee, damit ich keine neue Frage erstellen muss? Vielen Dank!
Deutsch
Egal, mir fehlte am Ende der Version ein Unterstrich.
Deutsch
Vielen Dank. Dies löst auch mein Problem mit Ruby v2.5.1p57
widi83
132
gem update --system

aktualisiert die Rubygems und behebt das Problem.

antonpaisov
quelle
3
Nur um zu verdeutlichen, wie @noraj betont, wurde das Problem in der neuen Version von Bundler eingeführt. Wenn Sie dem Link folgen, besteht die Lösung darin, RubyGems zu aktualisieren.
ReggieB
1
gem update --systemarbeitete für mich: ruby 2.5.0 , bundler 2.0.1 , macOS 10.13.6 .
Jagdeep Singh
74

Aktualisieren:

Gemäß der Antwort von @ noraj und dem Kommentar von @Niels Kristian sollte der folgende Befehl die Aufgabe erfüllen.

gem update --system
bundle install

Ich habe das geschrieben, falls jemand in ein Problem wie das meine gerät.

gem install bundler zeigt, dass alles gut installiert ist.

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

Beim Tippen ist bundleein Fehler aufgetreten:

/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>'

Und in dem Ordner /Users/nikkov/.rvm/rubies/ruby-2.4.0/lib/ruby/gems/2.4.0/gems/gab es keinen bundler-1.16.0Ordner.

Ich habe das mit behobensudo gem install bundler

Nik Kov
quelle
6
Nachdem Sie es "repariert" haben, stellen Sie sicher, dass Sie Ihre Verzeichnisberechtigungen für .rvm und .gem
humanity
1
@ Menschheit erklären detaillierter bitte, kaufen Sie die Bearbeitung meiner Antwort
Nik Kov
1
@humanity chrs für Ihre Antwort - könnten Sie bitte erläutern, was Sie meinen, indem Sie Ihre Verzeichnisberechtigungen für .rvm und .gem korrigieren?
BKSpurgeon
1
@Nik kov Der Speicherort der Ordner .rvm und .gem befindet sich wahrscheinlich in Ihrem Home-Ordner. Versuchen Sie, die Berechtigungen mit dem Befehl chmod zu ändern. Es hat bei mir funktioniert.
Souravirus
4
sudo gem install ist eine schlechte Praxis, im Normalfall sollte jede gem Installation ohne sudo
funktionieren
33

Die eigentliche Antwort ist hier, wenn Sie versuchen, Bundler 2.0.1 oder 2.0.0 zu installieren, da Bundler RubyGems v3.0.0 benötigt

Gestern habe ich Bundler 2.0 veröffentlicht, das einige wichtige Änderungen eingeführt hat. Eine dieser Änderungen bestand darin, Bundler so einzustellen, dass RubyGems v3.0.0 erforderlich ist. Nach der Veröffentlichung wurde deutlich, dass viele unserer Benutzer auf Probleme mit Bundler 2 stoßen, für die eine wirklich neue Version von RubyGems erforderlich ist.

Wir haben uns das Feedback der Benutzer genau angehört und beschlossen, die RubyGems-Anforderung auf Version 2.5.0 zu reduzieren. Wir haben eine neue Bundler-Version, v2.0.1, veröffentlicht, die diese Anforderung anpasst.

Weitere Informationen finden Sie unter: https://bundler.io/blog/2019/01/04/an-update-on-the-bundler-2-release.html

noraj
quelle
1
Vielen Dank, Ihr Link hat mir einige Zeit erspart, das Problem zu googeln
Ilya Konyukhov
Capistrano versagte auf einer neuen Maschine, aber nicht auf alten. Dies hat das Problem für mich behoben.
CWitty
1
Es kann nicht "die wirkliche Antwort" auf die Frage des OP sein, da Bundler 2.0 2017 nicht existierte, obwohl die Leute diese Seite sicherlich finden werden, weil die Symptome gleich sind.
Philihp Busby
Ich habe das Problem mit Bundler 2.0.1
Fabrizio Bertoglio
Hier sind weitere wichtige Änderungen in Version 2.0.0: github.com/bundler/bundler/releases/tag/v2.0.0
Joshua Pinter
31

Dies hat es behoben:

  1. Entfernen Sie Gemfile.lock rm Gemfile.lock
  2. bundle installwieder laufen

EDIT: NICHT IN DER PRODUKTION TUN!

Für die Produktion gehen Sie zu dieser Antwort: https://stackoverflow.com/posts/54083113/revisions

Klonept
quelle
Ich verwende Visual Studio-Code und lade und veröffentliche über Azure Devops, wo es beim Erstellen fehlgeschlagen ist. Ich habe die Sperrdatei nur lokal gelöscht, festgeschrieben und dann gepusht. Der Build schlug im Schritt " Gems installieren" fehl , aber jetzt funktioniert er.
David Jones
4
Für ein bestehendes Produktionsprojekt ist dies eine schreckliche Idee. Am Ende installieren Sie eine Reihe von nicht getesteten (mit Ihrem System) neuen Codes.
Absichten
Ja, dies ist eine schlechte Idee und sollte nicht als Lösung angesehen werden. Es zeigt, dass die andere Antwort (über eine nicht übereinstimmende Bundler-Version) richtig ist. Die Installation der richtigen Version von Bundler sollte das Problem beheben.
Robin Daugherty
Danke @RobinDaugherty, ich habe die Antwort bearbeitet, um alle zu warnen, dies nicht in der Produktion zu tun.
Klonept
Dies sollte auch nicht in der Entwicklung erfolgen. Es gibt einen guten Grund für die Sperrdatei, sie sollte in einem vorhandenen Projekt nicht gelöscht werden. Die Installation der richtigen Bundler-Version auf Ihrem Computer behebt das Problem. Das Löschen Gemfile.locksollte als letzter Ausweg betrachtet werden, da dies zu anderen Problemen führen kann.
Robin Daugherty
19

Der Grund ist Ihre aktuelle Ruby-Umgebung. Sie haben eine andere Version von Bundler mit der Version in Gemfile.lock.

  • Auf sichere Weise installieren Sie den Bundler mit der gleichen Version in Gemfile.lock, dies wird nichts kaputt machen, wenn etwas Unbestreitbares passiert ist.
  • Harter Weg, einfach entfernen Gemfile.lockund ausführen bundle install.
Mathew P. Jones
quelle
2
Dank dafür. Auf jeden Fall sollte jeder die sichere Version verwenden, um die Umgebung nicht mit neu ungetesteten Edelsteinen durcheinander zu bringen . So installieren Sie Bündler mit spezifischer Version zB 1.17Verwendunggem install bundler -v 1.17
ANKA
12

Wenn Sie die verwendete Ruby-Version geändert haben rvm use, entfernen Sie Gemfile.lock und versuchen Sie es erneut.

Wawa Loo
quelle
4

Öffnen Sie Gemfile.lock, das sich im Stammverzeichnis Ihres App-Ordners befindet. Scrollen Sie zum Ende der Datei und sehen Sie sich die verwendete Bundler-Version an. Dann stellen Sie sicher, dass Sie die verwendete Bundler-Version installieren:

gem install bundler -v x.xx.xx

Oder - löschen Sie Gemfile.lock und Bundle, wenn Sie eine höhere Bundler-Version installiert haben.

Sie haben die Wahl, mein Freund.

Georg Keferböck
quelle
3
Ich würde nicht empfehlen, Gemfile.lock zu löschen, da dadurch auch alle Gems aktualisiert werden. Dies kann zu großen Problemen führen.
Sandro L
@ SandroL - stimme deiner Aussage voll und ganz zu. Es ist jedoch eine Option für diejenigen, die Risiken eingehen und sich für Dramen interessieren.
Georg Keferböck
Danke dir. Die Installation der Version, die ich in dem Gemfile.lockOrdner hatte, hat den Trick gemacht!
Codeadventurer
2

So installieren Sie einen Bundler, der Ihrer Gemfile.lockVerwendung entspricht:

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

In meinem Fall haben die obigen Vorschläge bei mir nicht funktioniert. Meins war ein wenig anderes Szenario.

Als ich versuchte, bundlermit zu installieren gem install bundler.. Aber ich bekam

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

dann habe ich versucht, sudo gem install bundlerdann bekam ich

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

dann habe ich es mit versucht sudo gem install bundler -n /usr/local/bin( /usr/binin meinem Fall einfach nicht arbeiten).

Und dann erfolgreich installiert bundler

BEARBEITEN: Ich verwende MacOS und /usr/binarbeite aus diesem Grund möglicherweise nicht für mich ( https://stackoverflow.com/a/34989655/3786657 Kommentar).

Rahul Dess
quelle
0

Ich hatte heute das gleiche Problem. Ich löse dieses Problem , indem jede Entfernung PATHin .bashrcfür ältere rvm.

xhg
quelle
1
Sie retten mich Ich hatte Export PATH = "$ PATH: $ HOME / .rvm / bin" in meinem bashrc, ich entferne es und es funktioniert
bormat
0

Mein Problem war, dass ich RVM verwende und die falsche Ruby-Version aktiviert habe ...

Hoffe das hilft mindestens einer Person

Greg Hilston
quelle
0

Zusätzlich zu den vielen Antworten ergab sich mein Problem aus dem Wunsch, den Rubin des Dockers als Basis zu verwenden, aber dann rbenv darüber zu verwenden. Das vermasselt viele Dinge.

Ich habe es in diesem Fall behoben durch:

  • Die Gemfile.lock-Version musste aktualisiert werden. Durch Ändern von "BUNDLED WITH" auf die neueste Version wurde die Fehlermeldung zu einem bestimmten Zeitpunkt geändert, sodass möglicherweise eine Fehlermeldung erforderlich war
  • Deaktivieren Sie in .bash_profile oder .bashrc die Umgebungsvariablen:
unset GEM_HOME
unset BUNDLE_PATH

Danach hat rbenv gut funktioniert. Ich bin mir nicht sicher, wie diese Env-Vars überhaupt geladen wurden ...

user208769
quelle
-2

Ich habe Ruby in meinem speziellen Fall von 2.5.x auf 2.4.x herabgestuft.

Victor Pudeyev
quelle
-2

Was ich tun musste rake clean --force. Dann tat gem install rakeund so weiter.

Sudhanshu
quelle