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.
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 fais 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 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
, ~/.gem
Gemfile.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.
As-tu couru
rbenv rehash
Cela fournira des cales pour tous les binaires Ruby, y compris ceux installés par des gemmes.
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/
Je vous suggère d'utiliser la gemme 'capistrano-rbenv' ( https://github.com/yyuu/capistrano-rbenv )
assurez-vous que "rbenv" et une version de Ruby (par exemple, 1.9.3) sont installés 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 cales 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 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.
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.
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.
Essayez ce plugin rbenv, il permettra aux shims de connaître les chemins des bundles.