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.
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.
Avez-vous l'exécutez
rbenv rehash
cela fournira des cales pour tous les binaires ruby, y compris ceux installés par des gemmes.
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 /
je vous suggère d'utiliser la gemme 'capistrano-rbenv' ( https://github.com/yyuu/capistrano-rbenv )
-
assurez-vous que vous avez "rbenv" et une version ruby (par exemple 1.9.3) installé dans le serveur distant
-
dans votre configuration/déploiement.RB (dossier capistrano)
require 'capistrano-rbenv'
-
dans votre Gemfile:
gem 'capistrano-rbenv', '1.0.1'
-
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]
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
.
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.
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.
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.
donnez à ce plugin rbenv un essai, il va rendre shims conscient des chemins de bundler