find_spec_for_exe ': impossible de trouver le générateur de gemmes (> = 0.a) (Gem :: GemNotFoundException)

218

J'ai utilisé sudo bundle installet cela pourrait être la cause du problème?

Maintenant j'ai:

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

J'obtiens l'erreur suivante lorsque j'essaie d'exécuter bundle exec jekyll serveou simplementjekyll 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

De plus, lorsque j'accède au dossier dans lequel j'ai mon blog, cd my_pathje reçois le message suivant:

VM a utilisé votre Gemfile pour sélectionner Ruby, tout va bien - Heroku le fait aussi, vous pouvez ignorer ces avertissements avec 'rvm rvmrc warning ignore / Library / WebServer / Documents / blog / Gemfile'. Pour ignorer l'avertissement pour tous les fichiers, exécutez «avertissement rvm rvmrc ignorer tous les fichiers Gem». Version d'interprète ruby ​​inconnue (je ne sais pas comment gérer): RUBY_VERSION.

Je ne sais pas comment résoudre ce problème. Je veux juste créer mon blog statique et honnêtement, je n'ai aucune idée de Ruby, Gem ou Bundle :) J'apprécierais donc quelques idées!

Alvaro
la source
Cette aide peut-elle peut-être: github.com/rvm/rvm/issues/1860
Cyzanfar
@Cyzanfar merci pour ça! Je l'ai essayé, j'ai maintenant une nouvelle erreur sur le processus: stackoverflow.com/questions/47035080/…
Alvaro

Réponses:

364

Le problème dans mon cas est que le Gemfile.lockfichier avait une BUNDLED_WITHversion 1.16.1et une version gem install bundlerinstallée 2.0.1, donc il y avait une incompatibilité de version lorsque vous cherchez à redresser le dossier

gem install bundler -v 1.16.1 corrigé

Bien sûr, vous pouvez également modifier vos Gemfile.lock« s BUNDLED_WITHavec la dernière bundlerversion et les utiliser des logiciels récents, comme Sam3000 suggère

Antonio Tapiador
la source
15
Comme alternative, vous souhaiterez peut-être changer la BUNDLED_WITHversion pour la dernière version de bundler. Cela a fonctionné pour moi et m'a également évité d'avoir besoin d'un logiciel obsolète :)
Unencoded
5
Bundler 2 vient de sortir, donc si vous ne spécifiez pas comme ci-dessus dans votre Dockerfile, vous allez rencontrer cette erreur bundler.io/blog/2019/01/03/announcing-bundler-2.html
cameck
Salut @ antonio-tapiador J'ai ce problème, mais je suis sur Windows (je ne peux pas passer à Linux). J'ai couru gem install bundler -v 1.16.1et maintenant si gem.bat list bundler je cours, j'obtiens bundler (2.0.1, 1.16.1, 1.9.6). Je ne peux pas changer la version actuelle: l' exécution bundle.bat _1.16.1 installme donne cette erreur: Could not find command "_1.16.1". Avez-vous une idée, donc je n'ai pas à créer de nouvelle question? Merci!
Allemand
Tant pis, il me manquait un trait de soulignement à la fin de la version.
Allemand
Merci. Cela résout également mon même problème en utilisant ruby ​​v2.5.1p57
widi83
132
gem update --system

mettra à jour les rubygèmes et résoudra le problème.

antonpaisov
la source
3
Juste pour clarifier - comme le souligne @noraj - le problème a été introduit dans la nouvelle version de bundler. Si vous suivez le lien, la solution est de mettre à jour RubyGems.
ReggieB
1
gem update --systemtravaillé pour moi: ruby 2.5.0 , bundler 2.0.1 , macOS 10.13.6 .
Jagdeep Singh
74

Mettre à jour:

Selon la réponse de @ noraj et le commentaire de @Niels Kristian, la commande suivante devrait faire le travail.

gem update --system
bundle install

J'ai écrit ceci au cas où quelqu'un entrerait dans un problème comme le mien.

gem install bundler montre que tout s'installe bien.

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

Quand j'ai tapé bundleil y avait une erreur:

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

Et dans le dossier, /Users/nikkov/.rvm/rubies/ruby-2.4.0/lib/ruby/gems/2.4.0/gems/il n'y avait pas de bundler-1.16.0dossier.

J'ai corrigé cela avecsudo gem install bundler

Nik Kov
la source
6
Après l'avoir "réparé", assurez-vous de corriger les autorisations de votre répertoire sur .rvm et .gem
humanité
1
@humanity expliquer plus en détail s'il vous plaît, achetez l'édition de ma réponse
Nik Kov
1
@humanity chrs pour votre réponse - seriez-vous en mesure de préciser ce que vous voulez dire en corrigeant les autorisations de votre répertoire sur .rvm et .gem?
BKSpurgeon
1
@Nik kov l'emplacement des dossiers .rvm et .gem se trouve probablement dans votre dossier personnel. Essayez de changer leurs autorisations par la commande chmod. Ça a marché pour moi.
Souravirus
4
l'installation de sudo gem est une mauvaise pratique, dans le cas normal, toute installation de gem devrait fonctionner sans sudo
iamdi
33

La vraie réponse est ici si vous essayez d'installer bundler 2.0.1 ou 2.0.0 car Bundler nécessite RubyGems v3.0.0

Hier, j'ai publié Bundler 2.0 qui a introduit un certain nombre de changements de rupture. L'une de ces modifications consistait à configurer Bundler pour exiger RubyGems v3.0.0. Après avoir publié la version, il est devenu clair que beaucoup de nos utilisateurs rencontrent des problèmes avec Bundler 2 nécessitant une toute nouvelle version de RubyGems.

Nous avons écouté attentivement les commentaires des utilisateurs et avons décidé d'assouplir l'exigence RubyGems à la version 2.5.0 au minimum. Nous avons publié une nouvelle version de Bundler, v2.0.1, qui ajuste cette exigence.

Pour plus d'informations, voir: https://bundler.io/blog/2019/01/04/an-update-on-the-bundler-2-release.html

noraj
la source
1
Merci, votre lien m'a fait gagner du temps sur Google pour résoudre le problème
Ilya Konyukhov
Capistrano échouait sur une nouvelle machine mais pas sur les anciennes. Cela a résolu le problème pour moi.
CWitty
1
Cela ne peut pas être "la vraie réponse" à la question du PO car Bundler 2.0 n'existait pas en 2017, bien que les gens trouveront certainement cette page car les symptômes sont les mêmes.
Philihp Busby
Je rencontre le problème avec bundler 2.0.1
Fabrizio Bertoglio
Voici d'autres changements de rupture dans la version 2.0.0: github.com/bundler/bundler/releases/tag/v2.0.0
Joshua Pinter
31

Cela l'a corrigé:

  1. Supprimer Gemfile.lock rm Gemfile.lock
  2. courir à bundle installnouveau

EDIT: NE PAS LE FAIRE EN PRODUCTION!

Pour la production, allez à cette réponse: https://stackoverflow.com/posts/54083113/revisions

Klonept
la source
J'utilise Visual Studio Code et je télécharge et publie via Azure Devops, c'est là qu'il échouait sur Build., Je viens de supprimer le fichier de verrouillage localement, validé puis poussé. La construction échouait à l' étape Installer les gemmes mais maintenant cela fonctionne.
David Jones
4
Pour un projet de production existant, c'est une idée terrible. Vous finirez par installer un tas de nouveau code non testé (avec votre système).
Intents
Oui, c'est une mauvaise idée et ne doit pas être considérée comme une solution. Cela prouve que l'autre réponse (à propos d'une version Bundler incompatible) est correcte. L'installation de la bonne version de Bundler devrait le corriger.
Robin Daugherty
Merci @RobinDaugherty, j'ai édité la réponse pour avertir tout le monde de ne pas le faire en production.
Klonept
Cela ne devrait pas non plus être fait en cours de développement. Il y a une bonne raison pour le fichier de verrouillage, il ne doit pas être supprimé dans un projet existant. L'installation de la bonne version de bundler sur votre machine résout le problème, la suppression Gemfile.lockdoit être considérée comme un dernier recours car elle peut entraîner d'autres problèmes.
Robin Daugherty
19

La raison en est votre environnement Ruby actuel, vous avez une version différente de bundler avec la version en Gemfile.lock.

  • De façon sûre, installez bundler avec la même version dans Gemfile.lock, cela ne cassera rien s'il y a quelque chose d'incampable.
  • À la dure, il suffit de retirer Gemfile.locket de courir bundle install.
Mathew P. Jones
la source
2
Merci pour ça. Certainement, tout le monde devrait utiliser la version sûre pour ne pas gâcher l'environnement avec des gemmes nouvellement non testées . Pour installer le bundler avec une version spécifique, par exemple, 1.17utilisezgem install bundler -v 1.17
anka
12

Si vous avez changé la version ruby ​​que vous utilisez avec rvm use, supprimez Gemfile.lock et réessayez.

Wawa Loo
la source
4

Ouvrez Gemfile.lock, qui se trouve à la racine de votre dossier d'application. Faites défiler jusqu'à la fin du fichier et voyez la version du bundle utilisée. Ensuite, assurez-vous d'installer la version du bundler utilisée:

gem install bundler -v x.xx.xx

Ou - supprimez le Gemfile.lock et le bundle si vous avez installé une version de bundler supérieure.

Le choix vous appartient, mon ami.

Georg Keferböck
la source
3
Je ne recommanderais pas de supprimer le Gemfile.lock car cela mettrait également à jour toutes les gemmes. Cela peut entraîner d'énormes problèmes.
Sandro L
@SandroL - entièrement d'accord avec votre déclaration. Cependant, c'est une option pour ceux qui prennent des risques et qui sont attirés par le drame.
Georg Keferböck
Je vous remercie. L'installation de la version que j'avais dans le Gemfile.lockdossier a fait l'affaire!
codeadventurer
2

pour installer un bundler correspondant à votre Gemfile.lockutilisation:

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

Dans mon cas, les suggestions ci-dessus n'ont pas fonctionné pour moi. Le mien était un scénario peu différent.

Quand j'ai essayé d'installer bundler utilisant gem install bundler.. Mais je devenais

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

alors j'ai essayé d'utiliser sudo gem install bundleralors je devenais

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

puis j'ai essayé avec sudo gem install bundler -n /usr/local/bin(juste à /usr/binforce de travailler dans mon cas).

Et puis installé avec succès bundler

EDIT: J'utilise MacOS, peut-être /usr/binne fonctionnera pas pour moi pour cette raison ( https://stackoverflow.com/a/34989655/3786657 commentaire)

Rahul Dess
la source
0

J'ai eu le même problème aujourd'hui. Je résoudre ce problème en supprimant tout PATHdans .bashrcpour les personnes âgées rvm.

xhg
la source
1
Vous me sauvez j'ai exporté PATH = "$ PATH: $ HOME / .rvm / bin" dans mon bashrc, je le supprime et ça marche
bormat
0

Mon problème était que j'utilisais RVM et que la mauvaise version de Ruby était activée ...

J'espère que cela aide au moins une personne

Greg Hilston
la source
0

Pour ajouter aux nombreuses réponses, mon problème venait de vouloir utiliser le rubis du docker comme base, mais d'utiliser ensuite rbenv par-dessus. Cela fout beaucoup de choses.

Je l'ai corrigé dans ce cas par:

  • La version Gemfile.lock a dû être mise à jour - la modification de "BUNDLED WITH" à la dernière version a à un moment donné changé le message d'erreur, donc peut-être nécessaire
  • dans .bash_profile ou .bashrc, en supprimant les variables d'environnement:
unset GEM_HOME
unset BUNDLE_PATH

Après cela, rbenv a bien fonctionné. Je ne sais pas comment ces vars env étaient chargés en premier lieu ...

user208769
la source
-2

J'ai déclassé le rubis de 2,5.x à 2,4.x dans mon cas particulier.

Victor Pudeyev
la source
-2

Je devais le faire rake clean --force. Puis a fait gem install rakeet ainsi de suite.

Sudhanshu
la source