1
votes

Bundler utilisant une mauvaise version de Ruby

Lorsque j'essaie de démarrer mon serveur Rails, j'obtiens l'erreur suivante:

$ ruby -v
ruby 2.3.8p459 (2018-10-18 revision 65136) [x86_64-darwin18]

$ rbenv version
2.3.8 (set by /Users/ceasar/foo/.ruby-version)

$ which -a ruby
/Users/ceasar/.rbenv/shims/ruby
/usr/local/opt/ruby@2.3/bin/ruby
/usr/local/bin/ruby
/usr/bin/ruby

$ which -a bundle
/Users/ceasar/.rbenv/shims/bundle
/usr/local/bin/bundle

$ /usr/bin/xcodebuild -version
Xcode 10.2
Build version 10E125

$ brew list ruby@2.3
/usr/local/Cellar/ruby@2.3/2.3.8_1/bin/erb
/usr/local/Cellar/ruby@2.3/2.3.8_1/bin/gem
/usr/local/Cellar/ruby@2.3/2.3.8_1/bin/irb
/usr/local/Cellar/ruby@2.3/2.3.8_1/bin/rake
/usr/local/Cellar/ruby@2.3/2.3.8_1/bin/rdoc
/usr/local/Cellar/ruby@2.3/2.3.8_1/bin/ri
/usr/local/Cellar/ruby@2.3/2.3.8_1/bin/ruby
/usr/local/Cellar/ruby@2.3/2.3.8_1/include/ruby-2.3.0/ (25 files)
/usr/local/Cellar/ruby@2.3/2.3.8_1/lib/libruby.2.3.0.dylib
/usr/local/Cellar/ruby@2.3/2.3.8_1/lib/pkgconfig/ruby-2.3.pc
/usr/local/Cellar/ruby@2.3/2.3.8_1/lib/ruby/ (1211 files)
/usr/local/Cellar/ruby@2.3/2.3.8_1/lib/ (3 other files)
/usr/local/Cellar/ruby@2.3/2.3.8_1/share/emacs/ (7 files)
/usr/local/Cellar/ruby@2.3/2.3.8_1/share/man/ (4 files)
/usr/local/Cellar/ruby@2.3/2.3.8_1/share/ri/ (13487 files

$ bundle env | head -n 40
## Environment

```
Bundler       2.0.1
  Platforms   ruby, x86_64-darwin-18
Ruby          2.3.8p459 (2018-10-18 revision 65136) [x86_64-darwin18]
  Full Path   /Users/ceasar/.rbenv/versions/2.3.8/bin/ruby
  Config Dir  /Users/ceasar/.rbenv/versions/2.3.8/etc
RubyGems      2.5.2.3
  Gem Home    /Users/ceasar/.rbenv/versions/2.3.8/lib/ruby/gems/2.3.0
  Gem Path    /Users/ceasar/.gem/ruby/2.3.0:/Users/ceasar/.rbenv/versions/2.3.8/lib/ruby/gems/2.3.0
  User Path   /Users/ceasar/.gem/ruby/2.3.0
  Bin Dir     /Users/ceasar/.rbenv/versions/2.3.8/bin
Tools
  Git         2.19.2
  RVM         not installed
  rbenv       rbenv 1.1.2
  chruby      not installed
```

## Bundler Build Metadata

```
Built At          2019-01-04
Git SHA           d7ad2192f
Released Version  true
```

## Bundler settings

```
build.libv8
  Set for the current user (/Users/ceasar/.bundle/config): "--with-system-v8"
build.mysql2
  Set for the current user (/Users/ceasar/.bundle/config): "--with-mysql-config=/usr/local/Cellar/mysql@5.7/5.7.24/bin/mysql_config"
path
  Set for your local app (/Users/ceasar/Desktop/beacon/.bundle/config): "vendor/bundle"
disable_shared_gems
  Set for your local app (/Users/ceasar/Desktop/beacon/.bundle/config): true
```

Je ne comprends pas pourquoi cela se produit, car j'ai défini Ruby sur 2.3.8 à la fois en utilisant Homebrew et en utilisant rbenv. 2.3.7 est la version du ruby ​​du système. J'utilise Mac OS 10.14.4.

$ bundle exec rails s
Your Ruby version is 2.3.7, but your Gemfile specified ~> 2.3.8

Je ne vois rien ici qui me ferait penser qu'il devrait utiliser 2.3.7.

Je ne sais pas quoi essayer d'autre.

Comment Bundler décide-t-il de la version de Ruby à utiliser, et comment puis-je le configurer pour utiliser rbenv ou mon installation Ruby homebrew?


4 commentaires

Il se peut que votre shell ait l'ancienne commande bundle en cache, essayez d'exécuter hash -r .


Malheureusement, j'ai réussi à résoudre mon problème sans identifier ce qui l'a réellement résolu. Je laisserai cette question en suspens et accepterai une réponse si l'on commence à obtenir une majorité de votes.


J'ai essayé la méthode suggérée par @matt et ça marche! geeksforgeeks.org/hash-command-in-linux-with-examples


@matt veuillez ajouter cela comme réponse - cela a fonctionné pour moi et j'aimerais le voter.


4 Réponses :


1
votes

Que diriez-vous d'essayer d'utiliser «rvm»?

rvm install 2.4.2

Cette commande installera une autre version de ruby, 2.4.2

Et vous pouvez simplement vérifier les versions que vous avez comme

liste rvm .

Après cela, exécutez la version que vous souhaitez comme ci-dessous,

rvm ou rvm utilise

J'espère que cela vous aidera!


0 commentaires

0
votes

Je ne suggère pas d'utiliser RVM au lieu de RBEnv. RBEnv est l'une des solutions les plus récentes et la plupart des gens s'y tiennent.

Pouvez-vous essayer d'exécuter gem update --system pour mettre à jour votre bundler en premier.


0 commentaires

0
votes

Installez Rbenv et exécutez les commandes suivantes dans le répertoire de votre projet pour installer 2.3.8:

rbenv install 2.3.8
rbenv local 2.3.8
bundle install --path=vendor/cache


0 commentaires

0
votes

Résumé: la mauvaise version du bundler est à l'origine du problème. Utilisez un gestionnaire de versions ruby ​​pour installer la version ruby ​​nécessaire. Ensuite, installez la version correcte du gem bundler pour votre projet.

Détails: Dans mon cas, j'exécute un exemple de rails sur github qui nécessitait une ancienne version de ruby ​​et bundler et j'ai obtenu l'erreur décrit.

Pour gérer mes différentes versions de ruby, j'utilise ruby-install et chruby tous deux installés avec homebrew .

J'ai suivi ces étapes pour résoudre le problème sous macOS Catalina v10.15.7:

Étapes de résolution

Could not find 'bundler' (1.16.1) required by your ... /Gemfile.lock. (Gem::GemNotFoundException)
To update to the latest version installed on your system, run `bundle update --bundler`.
To install the missing version, run `gem install bundler:1.16.1`

Avant d'exécuter les étapes ci-dessus, les messages d'erreur m'ont indiqué quelle version de ruby ​​et de bundler je devais installer . Le bundler système était de la mauvaise version (je suis sur un mac) et le message d'erreur initial utilisant cette version m'a donné l'erreur ci-dessous. Ce n'est qu'après l'installation de la gemme du bundler nécessaire (voir ci-dessus) que la version correcte de ruby ​​a été résolue (voir ci-dessus).

Erreurs avant résolution

% bundle install
Your Ruby version is 2.6.3, but your Gemfile specified 2.4.1
% which ruby
/Users/richardlogwood/.rubies/ruby-2.4.1/bin/ruby
% which bundle
/usr/bin/bundle

Remarque, le la version du bundle requise a été indiquée par ce message d'erreur:

% ruby-install 2.4.1
# open a new shell so chruby will find  2.4.1
% chruby 2.4.1

% which ruby
/Users/richardlogwood/.rubies/ruby-2.4.1/bin/ruby

% gem install bundler:1.16.1
% which bundle
/Users/richardlogwood/.gem/ruby/2.4.1/bin/bundle

% cd (to the rails project directory)

# Note: it's a rails project so there was a binstub 
# for bundler, hence `bin/bundler` in the project directory*

% bin/bundler install
% rake db:{create,migrate}
% bin/rails s


0 commentaires