Je viens de passer de rvm à rbenv et j’essaie d’utiliser bundler pour la gestion des gem. Après avoir exécuté l’ 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.
L’exécution de l’ bundle install
nouveau n’a eu aucun effet. Également essayé la bundle update
à 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 produit le bundle show
* 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 nécessite:
require "rubygems" require "bundler/setup" require 'sinatra'
Je suis convaincu que c’est une sorte de problème de cheminement où bundler et rbenv ne jouent pas. J’ai essayé de parcourir la documentation de rbenv, mais je n’ai rien trouvé.
Note: Dans une autre application sinatra, j’obtiens les éléments suivants lorsque je tente de l’exécuter:
Could not find addressable-2.2.7 in any of the sources Run `bundle install` to install missing gems.
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
Si je bundle install --system
cela fonctionne. Bien que je ne puisse pas voir cela comme une solution viable.
J’avais le même problème. Un indice était que la rbenv exec bundle exec command
fonctionnait et que rbenv exec bundle install --path vendor/bundle
, mais leurs équivalents préfixés échouaient.
J’ai essuyé mon ~/.rbenv
, ~/.gem
Gemfile.lock
et le vendor/bundle
à plusieurs resockets en essayant de commencer à nouveau. 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 marché!
Je pense que l’important, depuis que j’ai essayé ceci plusieurs fois, est de supprimer le fichier .gem de votre répertoire personnel. Cela semble être un obstacle.
As-tu couru
rbenv rehash
Cela fournira des cales pour tous les fichiers binarys ruby, y compris ceux installés par gems.
Ajouter ceci
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/
Je vous suggère d’utiliser la gem ‘capistrano-rbenv’ ( https://github.com/yyuu/capistrano-rbenv )
assurez-vous d’avoir “rbenv” et une version ruby (par exemple 1.9.3) installée sur le serveur distant
dans votre config / deploy.rb (fichier capistrano)
require 'capistrano-rbenv'
dans votre Gemfile:
gem 'capistrano-rbenv', '1.0.1'
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]
Vous devriez essayer d’utiliser chruby . chruby est une alternative ultra-minimale (~ 80 lignes) à RVM / rbenv. Contrairement à rbenv, chruby ne repose pas sur des shims et modifie simplement PATH
, GEM_HOME
et GEM_PATH
.
J’ai eu un problème similaire lorsque je suis passé de rvm à rbenv. J’ai découvert que mon bundler affichait une liste de gemmes différente de celle de ma commande de liste de gemmes. Commencez par vérifier les chemins que votre bundler et votre gem utilisent. Pour bundler, utilisez la commande show
et sélectionnez n’importe quelle gem.
$ bundle show ffi /my/project/path/vendor/ruby/1.9.1/gems/ffi-1.1.5
et ma commande d’ 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 mon bijou indiquait le bon chemin rbenv, mais mon bundler pointe vers le chemin fournisseur de mon projet.
L’exécution de la commande suivante devrait permettre de résoudre le problème de cheminement du bundler:
$ bundle install --system
Le chemin 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
De plus, lorsque j’ai exécuté la commande rvm implode
pour désinstaller rvm, il restait les fichiers suivants que je devais modifier pour supprimer les chemins rvm:
~/.profile ~/.bashrc ~/.zshrc
Si le chemin ~/.rvm
existe toujours, vous devrez le supprimer.
Vous devrez ouvrir une nouvelle session de terminal après avoir modifié ces fichiers. Enfin, après tout, j’ai finalement synchronisé mon bundler et ma gem.
Juste un rappel que rbenv n’est pas compatible avec rvm, ils ne jouent pas bien. Pour votre santé mentale, désinstallez rvm si vous voulez utiliser rbenv. Du README REv:
Note de compatibilité: rbenv est incompatible avec rvm. Les choses sembleront fonctionner jusqu’à ce que vous essayiez d’installer un bijou. Le problème est que rvm remplace en fait la commande gem par une fonction shell! Veuillez supprimer toutes les références à rvm avant d’utiliser rbenv.
Heureusement, Wayne (créateur de RVM) fournit un outil de suppression simple en utilisant:
rvm implode
En utilisation régulière ou:
rvmsudo rvm implode
Pour nettoyer le système RVM.
J’ai essayé tous les trucs ici, mais j’ai découvert que j’avais un .bundler dans mon répertoire utilisateur pour une raison quelconque. Cela causait le problème étrange au-dessus où la commande «that» listait correctement le bundle dans le chemin de shims, mais la vérification de bundle -v montrait l’ancienne version du système, tandis que /Users/jerimiah/.rbenv/shims/bundle affichait les dernières versions. J’ai supprimé .bundler dans mon répertoire personnel, remis en marche, redémarré mon terminal et tout a commencé à fonctionner.
Essayez ce plugin rbenv, il permettra aux shims de connaître les chemins des bundleurs