Lors de l'exécution de rake
j'obtiens cette erreur:
Vous avez déjà activé rake 0.9.2, mais votre Gemfile nécessite rake 0.8.7. Pensez à utiliser bundle exec.
En utilisant bundle exec rake
au lieu de rake
semble fonctionner, mais est-ce la meilleure façon de résoudre ce problème?
En utilisant bundle exec
est la bonne façon de procéder.
En gros, ce qui se passe, c’est que vous avez mis à jour la version 0.9.2 de rake qui entre maintenant en conflit avec la version spécifiée dans votre Gemfile. Auparavant, la dernière version de rake
était identique à celle de votre fichier Gemfile. Vous n'avez donc reçu aucun avertissement lorsque vous utilisez simplement rake
.
Yehuda Katz (l'un des développeurs originaux de Bundler) explique tout cela dans cet article de blog .
Pour éviter de taper bundle exec ...
_ tout le temps, vous pouvez configurer un alias ou une fonction dans votre shell pour les commandes que vous utilisez couramment avec Bundler. Par exemple, voici ce que j’utilise pour Rake:
$ type bake
bake is a function
bake ()
{
bundle exec rake "$@"
}
Si vous avez une raison de conserver la version actuelle de rake (ou toute autre gemme à l'origine du problème), matt est correct, la meilleure façon de faire est de lancer bundle exec
. Ceci utilise la version spécifiée dans votre Gemfile au lieu d'utiliser la dernière version de la gem que vous avez installée. (nathan.f77 a une bonne solution ci-dessous si vous ne voulez pas taper bundle exec
chaque fois que vous exécutez rake)
Sinon, s'il n'y a aucune raison de ne pas mettre à jour rake, vous pouvez exécuter
bundle update rake
Ceci mettra à jour votre fichier Gemfile.lock afin qu’il utilise la dernière version de rake au lieu d’avoir à exécuter bundle exec
à chaque fois.
Remarque: si vous exécutez uniquement bundle update
_ Ceci mettra à jour toutes les gemmes de votre Gemfile au lieu de simplement ratisser, ce qui n'est probablement pas ce que vous voulez, car si quelque chose se brise dans votre application, vous ne saurez pas quelle mise à jour de gem l'a provoquée.
Le moyen le moins recommandé de conserver l'ancienne version sans avoir à utiliser bundle exec
consiste à désinstaller les versions les plus récentes de rake.
$ gem uninstall rake Sélectionnez une gem à désinstaller: 1. rake-0.8.7 2. rake-0.9.2 3. Toutes les versions > 2 Désinstallé avec succès rake-0.9.2
Cela fonctionne, mais si vous travaillez avec plusieurs applications qui utilisent différentes versions de rake, cela peut être pénible car vous devrez constamment installer et désinstaller différentes versions.
Essayez bundle clean --force
Il supprime tous les joyaux système ne faisant pas partie de cet ensemble.
La dernière fois que cela m'est arrivé, j'avais mis à jour toutes mes pierres précieuses. J'ai fait un gem uninstall rake
et il a énuméré les options de version. J'ai choisi le plus récent, puis je n'ai pas eu à utiliser bundle exec
plus.
Fondamentalement, si vous utilisez bundle exec
_ il utilise la version de gem installée par votre bundle, ainsi que celle contenue dans Gemfile. Sans pour autant bundle exec
_ il utilise la version de votre choix, quelle que soit sa version.
bundle exec
est correct, mais vous ne voulez pas le taper à chaque fois.
Vous pouvez mettre ceci dans votre .bashrc:
# Automatically invoke bundler for rake, if necessary.
rake() { if [ -e ./Gemfile.lock ]; then bundle exec rake "$@"; else /usr/bin/env rake "$@"; fi; }
Ooh! L'article de Katz est excellent!
J'aime cette solution le meilleur:
bundle install --binstubs
afin que vous puissiez maintenant taper
bin/rake .stuff.
Pour quelqu'un comme moi qui développe des applications 2.3 et 3.0.9, cela me fait me sentir beaucoup mieux.