Bundler ne fonctionne pas avec rbenv, ne pouvait pas trouver [gem]

je viens de passer de rvm à rbenv et j'essaie d'utiliser bundler pour la gestion de gemmes. Après avoir lancé bundle install et essayé d'exécuter une application sinatra simple ( ruby app.rb ), je reçois ceci:

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

courir bundle install encore une fois n'a pas eu d'effet. J'ai aussi essayé bundle update comme le suggère une autre réponse à la question.

C'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)

C'est ce que mon application exige:

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

je suis convaincu que c'est une sorte de problème de chemin où bundler et rbenv ne jouent pas le jeu. J'ai cherché dans la documentation de rbenv, mais je n'ai rien trouvé.

Note: dans une application sinatra différente, j'obtiens ce qui suit en essayant de l'exécuter:

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

mise à Jour

si je fais bundle install --system ça marche. Bien que je ne puisse pas voir ça comme une solution viable.

38
demandé sur Scott Weldon 2012-03-07 17:56:42

9 réponses

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 échouaient.

j'ai essuyé mon ~/.rbenv , ~/.gem Gemfile.lock et vendor/bundle plusieurs fois essayant de repartir à zéro. Une fois celles-ci nettoyées, 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 marché!

je pense que la chose importante, puisque j'ai essayé cela quelques fois, est d'enlever le. gem fichier à partir de votre répertoire d'accueil. Il semble pour obtenir de la manière.

96
répondu kweerious 2018-02-26 19:42:03

Avez-vous l'exécutez

rbenv rehash

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

22
répondu Ben Woodall 2012-03-08 21:39:44

ajouter ce

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

à déployer.rb travaillait pour moi.

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

20
répondu thdr 2012-11-24 11:35:54

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

  1. assurez-vous que vous avez "rbenv" et une version ruby (par exemple 1.9.3) installé dans le serveur distant

  2. dans votre configuration/déploiement.RB (dossier capistrano)

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

    gem 'capistrano-rbenv', '1.0.1'
    
  4. c'est ça. pour déboguer si cela fonctionne, il suffit de lancer:

    $ 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
répondu Siwei Shen申思维 2013-04-03 06:01:09

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

2
répondu postmodern 2012-11-21 07:14:55

j'ai eu un problème similaire lorsque je suis passé de l'utilisation rvm à rbenv. J'ai trouvé que mon bundler montrait une liste de gemmes différente de ma commande gem list . Vérifiez d'abord les chemins utilisés par votre bundler et gem. Pour le bundler, utilisez la commande show et sélectionnez n'importe quel gem.

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

et ma gem environment commande (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 ma pierre pointer vers le chemin rbenv correct mais mon bundler est pointant sur le chemin du fournisseur de mon projet.

L'exécution de la commande suivante devrait corriger le problème de chemin du bundler:

$ bundle install --system
Le chemin du Bundler

devrait maintenant pointer vers le chemin rbenv.

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

J'ai aussi trouvé que lorsque j'ai lancé la commande rvm implode pour désinstaller rvm, il y avait encore les fichiers suivants que j'avais besoin de modifier pour supprimer les chemins rvm:

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

si le chemin ~/.rvm existe toujours, vous aurez besoin d'enlever cela.

vous aurez besoin d'ouvrir une nouvelle session de terminal après avoir changé ces fichiers. Finalement, après tout ce que j'ai finalement obtenu mon bundler et gem en synchronisation.

2
répondu rlawrenz 2012-12-10 07:15:15

juste un rappel aussi que rbenv est pas compatible avec rvm ils ne jouent pas bien. Pour votre santé mentale, désinstallez rvm si vous voulez utiliser rbenv. De la rbenv README:

compatibilité Note: rbenv est incompatible avec rvm. Les choses apparaîtront travailler jusqu'à ce que vous essayez d'installer un bijou. Le problème est que rvm en fait, elle remplace la commande gem par une fonction shell! Merci supprimer toute référence à rvm avant d'utiliser rbenv.

heureusement, Wayne (créateur de rvm) fournit un RVM supprimer facilement en utilisant:

rvm implode

comme usage régulier ou:

rvmsudo rvm implode

pour nettoyer l'ensemble du système rvm.

1
répondu ajhit406 2012-09-06 14:42:57

j'ai essayé toutes les choses ici, mais ce qui a fait pour moi était de découvrir que j'avais un .bundler dans mon répertoire utilisateur pour une raison quelconque. Cela a causé le problème étrange ci-dessus où la commande 'which' a correctement listé bundle dans le chemin shims, mais la vérification de bundle-v a montré l'ancienne version du système, tandis que /Users/jerimiah/.rbenv/shims / bundle a montré les dernières versions. J'ai supprimé .bundler dans mon répertoire personnel, rabâché, redémarré mon terminal, et tout a commencé à fonctionner.

1
répondu jerimiah797 2012-12-28 07:27:33

donnez à ce plugin rbenv un essai, il va rendre shims conscient des chemins de bundler

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

0
répondu CodedReality 2012-10-06 09:59:20