142 votes

Quelle est la différence entre Gemfile et Gemfile.lock dans Ruby on Rails ?

Je suis un débutant en Ruby on Rails et j'utilise Rails 3.0.9.

Quelle est la différence entre Gemfile y Gemfile.lock dans Rails ?

180voto

Dylan Markow Points 65796

El Gemfile est l'endroit où vous spécifiez les gemmes que vous voulez utiliser, et vous permet de spécifier les versions.

El Gemfile.lock est l'endroit où Bundler enregistre les versions exactes qui ont été installées. Ainsi, lorsque la même bibliothèque/le même projet est chargé(e) sur une autre machine, l'exécution de la commande bundle install examinera le Gemfile.lock et d'installer exactement les mêmes versions, plutôt que d'utiliser simplement l'application Gemfile et l'installation des versions les plus récentes. (L'exécution de versions différentes sur des machines différentes peut entraîner des tests erronés, etc.) Vous ne devriez jamais avoir à modifier directement le fichier de verrouillage.

Vérifiez L'objectif et la raison d'être de Bundler et plus particulièrement la section "Checking Your Code into Version Control".

169voto

Fatih Arslan Points 2759

Habituellement, nous écrivons les dépendances dans le Gemfile comme :

gem "nokogiri", "~> 1.4.4"
gem 'bcrypt-ruby', '~> 3.0.0'
gem 'uglifier', '>= 1.2.3'
..

Ici, vous dites en gros : " Je veux Nokogiri tant qu'il est supérieur à la version 1.4.4. ", etc. Supposons maintenant que j'ai configuré mon Gemfile il y a 8 mois et j'ai réussi à configurer mon application avec cette exigence. Il y a 8 mois, la version nokogiri était 1.4.4 . Mes applications rails fonctionnaient parfaitement sans aucun problème avec cette version.

Maintenant, pensez que j'essaie de construire avec le même Gemfile . Mais si nous regardons versions nokogiri nous voyons que la version stable actuelle a changé en 1.4.9 . Cela signifie que si nous essayons de construire, bundler installera la version 1.4.9 de nokogiri (supposons que nous n'avons pas Gemfile.lock ).

Qu'est-ce que cela signifie ?

Comme vous le voyez si vous n'avez pas de Gemfile.lock et courir :

bundle install

puis les gemmes actuellement utilisées peuvent être différentes à tout moment . Votre application a utilisé la version 1.4.4 et ça marche il y a 8 mois sans aucun problème, mais si vous essayez de le construire maintenant vous obtenez la version 1.4.9 . Peut-être que c'est cassé avec la dernière version de nokogiri la fonction géniale que vous avez utilisée avec 1.4.4 n'est pas plus disponible, etc.

Pour éviter ce genre de problème Gemfile.lock est utilisé. Sur le site Gemfile.lock seulement le versions exactes sont écrits et donc seuls ceux-ci seront installés. Cela signifie que si vous distribuez votre application avec un Gemfile.lock chaque machine aura les mêmes gemmes installées et le plus important ils ont tous la même version . Vous disposerez ainsi d'une pile de déploiement stable et commune.

Comment le fichier Gemfile.lock est-il créé ?

Il est automatiquement créé avec le premier :

bundle install

commande. Après cela, chaque fois que vous exécutez bundle install le paquet va d'abord chercher Gemfile.lock et installer les gemmes spécifiées là. C'est une habitude de distribuer ce fichier parmi vos projets pour assurer la cohérence et la stabilité.

Comment mettre à jour Gemfile.lock ?

Si la dernière version de vos applications vous convient, vous pouvez la mettre à jour. Gemfile.lock . Il suffit de refléter vos changements dans Gemfile . Cela signifie changer les dépendances pour les nouvelles versions exactes dans Gemfile . Après cette course :

bundle install

Cela vous permettra de mettre à jour Gemfile.lock avec la dernière version de vos applications.

6voto

Ajey Points 1059

Le Gemfile.lock

Lorsque vous exécutez bundle install, Bundler conservera les noms complets et les versions de toutes les gemmes que vous avez utilisées (y compris les dépendances des gemmes spécifiées dans le Gemfile(5)) dans un fichier appelé Gemfile.lock.

Bundler utilise ce fichier dans tous les appels ultérieurs à bundle install, ce qui garantit que vous utilisez toujours le même code exact, même si votre application se déplace d'une machine à l'autre.

À cause de la façon dont la résolution des dépendances fonctionne, même un changement apparemment petit (par exemple, une mise à jour d'une version ponctuelle d'une dépendance d'une gemme dans votre Gemfile(5)) peut résulter en des gemmes radicalement différentes nécessaires pour satisfaire toutes les dépendances.

Par conséquent, vous DEVRIEZ vérifier votre Gemfile.lock dans le contrôle de version. Si vous ne le faites pas, chaque machine qui vérifie votre dépôt (y compris votre serveur de production) résoudra à nouveau toutes les dépendances, ce qui entraînera l'utilisation de différentes versions du code tiers si l'une des gemmes du Gemfile(5) ou l'une de leurs dépendances a été mise à jour.

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