Pourquoi " bundle install "un gem au lieu de" gem install " pour une application rails 3?

je suis un programmeur débutant passant par le railstutalian par michael hartl, et de l'avis que le processus pour l'utilisation des pierres précieuses dans l'application grâce à l'ajout dans le gemfile, et ensuite de faire un:

$ bundle install

Aucune raison pourquoi il ne serait pas juste de faire un:

$ [sudo] gem install [the_gem]

et ensuite juste l'ajouter au fichier Gem? Je sais que c'était un peu le processus de retour dans les rails 2.

Merci!

25
demandé sur Michiel de Mare 2011-09-01 21:08:03
la source

3 ответов

utiliser bundler au lieu de la commande gem pour installer directement vos gemmes vous donne beaucoup d'avantages.

dans ce cas précis où vous suggérez d'utiliser la commande gem pour l'installer et l'ajouter plus tard à Gemfile, bundler résoudra toutes les dépendances pour vous lorsque vous installez un gem, que vous pourriez avoir à résoudre manuellement autrement.

Pour vous donner un exemple, prenons les dépendances suivantes:

sunspot_rails
  nokogiri (>= 1.2.0)

webrat
  nokogiri (>= 1.3) 

webrat et les gemmes sunspot_rails nécessitent différentes versions de nokogiri en tant que dépendance. Si vous utilisez simplement la commande gem pour les installer, il est possible qu'elle installe les deux versions de nokogiri ou pire, qu'elle se plaigne des conflits de versions. Bundler sera assez sage pour résoudre ce conflit de dépendances et installer la bonne version (par exemple nokogiri 1.3) et rendre sunspot_rails et webrat heureux!

Désolé pour la longue explication. Mais, j'espère que vous obtenez le point! :)

Et btw, vous devriez avoir une regardez ce fichier Gemfile.lock pour voir ce que bundler n'en coulisses pour vous.

38
répondu dexter 2011-09-01 21:32:01
la source

avec le Gemfile, vous pouvez vous assurer que tous les autres développeurs travaillant également sur votre application ont la même version de chaque gemme. Cela garantit également que vous n'avez pas mis un [the_gem] différent dans votre commmand gem de ce que vous avez dans votre fichier GEM.

3
répondu spike 2011-09-01 21:20:28
la source

certaines combinaisons gem n'ont de sens que dans des environnements spécifiques - par exemple un certain db en développement et un autre en production.

le Gemfile est un enregistrement de ce dont votre application a besoin dans chaque environnement, et bundle install installe exactement ce qui est nécessaire, en prenant soin de dépendances.

si l'une des gemmes de votre Gemfile est déjà installée dans votre gemset actuel (via gem install), alors le bundler va juste les utiliser (plutôt que de réinstaller ils.)

2
répondu Andrea 2011-09-01 21:28:57
la source