2010-01-27 3 views
7

Pour autant que je sais à la fois rails:freeze:gems et râteau gems:unpack placent les gemmes à /vendor. rails:freeze:gems les place à /vendor/rails, gems:unpack placez-les à /vendor/gems. Le point pour moi semble être le même, cependant. Dans les deux cas, le but est de fixer les gemmes et leurs versions telles qu'elles étaient pendant le développement. Y a-t-il une autre différence? Il me semble une duplication maintenant ..Quelle est la différence entre les rails de râteau: geler: gemmes et gemmes de râteau: déballer?

Répondre

7

D'après ce que je comprends, gem: unpack va décompresser toute gemme tierce dont votre application a besoin en fournisseur/gemmes.
rails: geler: les gemmes ne gèlent que les gemmes ayant trait aux rails eux-mêmes, ce qui gèle votre application pour une version spécifique des rails. Ainsi le répertoire différent/vendor/rails.

Pour commenter un peu plus:
Il y a cette ligne dans config/environment.rb
# Specifies gem version of Rails to use when vendor/rails is not present RAILS_GEM_VERSION = '2.3.2' unless defined? RAILS_GEM_VERSION

Donc, par défaut, rails vérifieront si le vendeur/rails répertoire existe, et utiliser les versions de ces gemmes si c'est le cas. Si ce n'est pas le cas, vous devez définir la version des rails qu'il utilisera, et les rails tenteront d'extraire les gemmes de votre système local.

Ainsi, la seule différence entre les deux commandes que je vois est que rails:freeze:gems ne jette que les fichiers rails dans le fournisseur/rails, ce qui est exactement où les rails veut qu'ils soient. La raison pour laquelle vous souhaitez utiliser gem:unpack est de vider les gemmes tierces dont dépend votre application. Ainsi, peu importe où votre application est exécutée, ces gemmes n'auront pas besoin d'être installées localement.

Vous pouvez penser à rails:freeze:gems comme un raccourci qui fait simplement gem:unpack de seulement les gemmes de rails dans les rails de répertoire attend (/ vendeur/rails), de sorte que vous ne devez pas le faire manuellement. Mais oui, dans les coulisses je m'attends rails:freeze:gems utilise probablement gem:unpack

+0

Merci! Cela clarifie beaucoup de choses. J'ai joué avec les tâches. Cependant il me semble être bizarre de manipuler les gemmes de rails et les autres gemmes différemment. D'une certaine manière, les gemmes de tiers et de rails ne sont que des gemmes. Je pense que bundler gère cela de la même manière sans aucune distinction. – fifigyuri