88 votes

Utilisez bundle exec ou simplement ratisser?

J'ai appris Rails en utilisant seulement la commande rake comme rake db:migrate ; Cependant, je viens de lire que l'utilisation devrait utiliser les bundle exec rake ... au lieu de simplement rake et maintenant je ne sais plus trop lequel utiliser. Donc, devriez-vous utiliser bundle exec rake au lieu de simplement rake ou est-ce juste une chose de préférence? Toute opinion serait très appréciée! Merci!

135voto

Jergason Points 7748

bundle exec exécute une commande dans le cadre de votre bundle.

Cela signifie qu'il utilise les pierres spécifié dans votre Gemfile. La plupart du temps, l'exécution d' bundle exec rake foo a les mêmes résultats que si vous venez a couru rake foo, surtout si vous avez les mêmes gemmes installé à l'échelle du système que dans votre Gemfile. Toutefois, certaines applications peuvent spécifier les différentes versions de gemmes que ceux que vous avez installé tout le système, et ceux exacte des gemmes et des versions pour être en mesure de fonctionner correctement. Si vous venez d'exécuter sans bundle exec, vous pouvez obtenir des erreurs étranges.

À l'aide de bundle exec garantit que le programme est exécuté avec l'environnement spécifié dans le gemfile, qui nous l'espérons signifie que c'est l'environnement que les créateurs du programme voulez être exécuté, qui nous l'espérons signifie qu'il doit exécuter correctement n'importe quelle configuration bizarre que vous avez sur votre ordinateur.

Essentiellement, il normalise l'environnement dans lequel le programme est exécuté. Cela permet d'éviter la version de l'enfer et rend la vie beaucoup plus facile.

Voir http://bundler.io/v1.3/man/bundle-exec.1.html pour plus d'info.

5voto

7stud Points 7467

$ bundle exec rake db:migrate
Utilise la version de râteau spécifié dans le Gemfile pour exécuter la tâche rake db:migrate.

Mais il n'y a pas de rake gem spécifié dans le Gemfile!
Oui, mais un râteau gem a été installé en tant que dépendance de certains autres gem-chercher dans le Gemfile.verrouillage. Donc, la règle doit être: Utilise la version de râteau spécifié dans le Gemfile.verrouillage.

Mais Gemfile.verrouillage de ne pas spécifier une version spécifique--il spécifie une version supérieure à x.y!
Ensuite, la règle doit être: Utilise la version de râteau qui a été installé dans le courant sertie.

$ rake db:migrate
Normalement, lorsque vous émettez une commande sur la ligne de commande, par exemple râteau, votre système de recherches pour la commande dans la liste des répertoires spécifiés dans la variable d'environnement PATH. Le premier répertoire qui contient la commande est la version de la commande qui est utilisé. Pour voir quel répertoire, vous pouvez le faire:

$ which rake

Donc, si vous exécutez,

$ rake db:migrate

qui peut utiliser un autre râteau joyau de celui que vous avez installé avec l' bundle install. Mais, même si votre système trouve le râteau même version que la version bundle exec, toutes les gemmes par la commission du code source sera recherchée dans des endroits à l'extérieur de votre projet est sertie. Par conséquent, il existe de nombreuses façons qui vient:

$ rake db:migrate

pouvez visser les choses.

Selon le Ruby on Rails Tutoriel Livre(gratuit en ligne), la section 3.6, si vous utilisez rvm 1.11.x+ vous n'avez pas besoin de faire précéder les commandes avec bundle exec.

1voto

pastullo Points 377

Si vous exécutez une tâche sans bundle exec , Rubygems récupérera la dernière version de la gem installée sur votre système.

En ajoutant le préfixe bundle exec l'exécutable s'exécutera dans le contexte de votre fichier Gemfile.lock, ce qui signifie qu'il sera exécuté avec la version définie dans le fichier gem.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X