web-dev-qa-db-fra.com

Bundler ne fonctionnant pas avec rbenv, impossible de trouver [gem]

Je viens de passer de rvm à rbenv et j'essaie d'utiliser bundler pour la gestion de gem. Après avoir exécuté bundle install et essayé de lancer une simple application sinatra (Ruby app.rb), je comprends ceci:

Could not find haml-3.1.4 in any of the sources
Run `bundle install` to install missing gems.

Lancer à nouveau bundle install n'a eu aucun effet. Également essayé bundle update comme suggéré par une autre réponse à une question.

Ceci est mon Gemfile:

source "http://rubygems.org"

gem "sinatra"
gem "haml"

C'est ce que bundle show produit

* bundler (1.0.22)
* haml (3.1.4)
* rack (1.4.1)
* rack-protection (1.2.0)
* sinatra (1.3.2)
* tilt (1.3.3)

Voici ce que mon application requiert:

require "rubygems"
require "bundler/setup"
require 'sinatra'

Je suis convaincu qu'il s'agit d'une sorte de problème de chemin où Bundler et Rbenv ne jouent pas. J'ai essayé de parcourir la documentation de rbenv mais je n'ai rien trouvé.

Remarque: dans une application Sinatra différente, le message suivant s'affiche:

Could not find addressable-2.2.7 in any of the sources
Run `bundle install` to install missing gems.

Informations supplémentaires

echo $PATH
/Users/uri/.rbenv/shims:/Users/uri/.rbenv/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin

which bundle
/Users/uri/.rbenv/shims/bundle

Mettre à jour

Si je fais bundle install --system cela fonctionne. Bien que je ne puisse pas voir cela comme une solution viable.

40
Uri

J'avais le même problème. Un indice était que rbenv exec bundle exec command fonctionnait et que rbenv exec bundle install --path vendor/bundle fonctionnait, mais leurs équivalents préfixés ont échoué.

J'ai essuyé quelques fois mon ~/.rbenv, ~/.gemGemfile.lock et vendor/bundle en essayant de recommencer à zéro. Une fois que ceux-ci ont été nettoyés, j'ai essayé ce qui suit:

rbenv install 1.9.3-p194
rbenv rehash # for paranoia's sake
rbenv global 1.9.3-p194
gem env # to check that everything was pointing at 1.9 and not the system
gem install --no-ri --no-rdoc bundler
rbenv rehash # necessary to load up the bundle executable
bundle --path=vendor/bundle

et ça a fonctionné!

Je pense que l’important, depuis que j’ai essayé cela plusieurs fois, est de supprimer le fichier .gem de votre répertoire personnel. Cela semble faire obstacle.

101
kweerious

As-tu couru

rbenv rehash

Cela fournira des cales pour tous les binaires Ruby, y compris ceux installés par des gemmes.

22
Ben Woodall

Ajout de cette 

set :default_environment, {
  'PATH' => "$HOME/.rbenv/shims:$HOME/.rbenv/bin:$PATH"
}

déployer.rb a fonctionné pour moi.

http://henriksjokvist.net/archive/2012/2/deploying-with-rbenv-and-capistrano/

20
thdr

Je vous suggère d'utiliser la gemme 'capistrano-rbenv' ( https://github.com/yyuu/capistrano-rbenv

  1. assurez-vous que "rbenv" et une version de Ruby (par exemple, 1.9.3) sont installés sur le serveur distant

  2. dans votre config/deploy.rb (fichier capistrano) 

    require 'capistrano-rbenv'
    
  3. dans votre Gemfile: 

    gem 'capistrano-rbenv', '1.0.1'
    
  4. c'est tout. pour déboguer si cela fonctionne, lancez simplement: 

    $ cap Shell
    cap> which Ruby
     ** [out :: 10.103.13.74] /root/.rbenv/shims/Ruby
    cap> Ruby -v
     ** [out :: 10.103.13.74] Ruby 1.9.3p327 (2012-11-10 revision 37606) [x86_64-linux]
    
6

Vous devriez essayer d’utiliser chruby . chruby est une alternative ultra-minimale (~ 80 lignes) à RVM/rbenv. Contrairement à rbenv, chruby ne repose pas sur des cales et modifie simplement PATH, GEM_HOME et GEM_PATH.

2
postmodern

J'ai eu un problème similaire lorsque je suis passé de rvm à rbenv. J'ai trouvé que mon bundle montrait une liste de gemmes différente de celle de ma commande gem list. Commencez par vérifier quels chemins votre bundler et votre gem utilisent. Pour le bundler, utilisez la commande show et sélectionnez n’importe quelle gemme.

$ bundle show ffi
/my/project/path/vendor/Ruby/1.9.1/gems/ffi-1.1.5

et ma commande gem environment (en partie)

$ gem environment
RubyGems Environment:
  - RUBYGEMS VERSION: 1.8.23
  - Ruby VERSION: 1.9.2 (2011-07-09 patchlevel 290) [x86_64-darwin10.8.0]
  - INSTALLATION DIRECTORY: /Users/rolf/.rbenv/versions/1.9.2-p290/lib/Ruby/gems/1.9.1

Ici, je pouvais voir que ma gemme pointait sur le bon chemin rbenv mais que mon bundle pointait sur le chemin du fournisseur de mon projet.

L'exécution de la commande suivante devrait résoudre le problème du chemin d'accès au bundler:

$ bundle install --system

Le chemin du bundler doit maintenant pointer vers le chemin de rbenv.

$ bundle show ffi
/Users/rolf/.rbenv/versions/1.9.2-p290/lib/Ruby/gems/1.9.1/gems/ffi-1.1.5

De plus, lorsque j'ai exécuté la commande rvm implode pour désinstaller rvm, il restait encore les fichiers suivants que je devais modifier pour supprimer les chemins d'accès rvm:

~/.profile
~/.bashrc
~/.zshrc

Si le chemin d'accès ~/.rvm existe toujours, vous devrez le supprimer.

Vous devrez ouvrir une nouvelle session de terminal après avoir modifié ces fichiers. Finalement, après tout cela, j'ai finalement réussi à synchroniser mon paquet et ma pierre précieuse.

2
rlawrenz

Juste un rappel aussi que rbenv est pas compatible avec rvm ils ne jouent pas bien. Pour des raisons de santé, désinstallez rvm si vous souhaitez utiliser rbenv. Du README de Rbenv:

Note de compatibilité: rbenv est incompatible avec rvm. Les choses vont apparaître travailler jusqu'à ce que vous essayiez d'installer un bijou. Le problème est que la MVM remplace en fait la commande gem avec une fonction shell! S'il vous plaît Supprimez toutes les références à rvm avant d'utiliser rbenv.

Heureusement, Wayne (créateur de rvm) fournit un rvm de suppression facilement en utilisant:

rvm implode

En usage régulier ou:

rvmsudo rvm implode

Pour nettoyer le système de RVM à l'échelle. 

1
ajhit406

J’ai essayé toutes les choses ici, mais ce qui m’a vraiment aidé, c’est de découvrir que j’avais un .bundler dans mon répertoire personnel, pour une raison quelconque. Cela posait le problème étrange ci-dessus: la commande 'which' listait correctement bundle dans le chemin des shims, mais vérifier bundle -v montrait l'ancienne version du système, tandis que /Users/jerimiah/.rbenv/shims/bundle montrait les dernières versions. J'ai supprimé .bundler dans mon répertoire personnel, réorganisé, redémarré mon terminal et tout a commencé à fonctionner. 

1
jerimiah797

Essayez ce plugin rbenv, il permettra aux shims de connaître les chemins des bundles. 

https://github.com/carsomyr/rbenv-bundler

0
CodedReality