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 ?
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 ?
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".
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
).
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.
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é.
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.
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 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.