Je suis un débutant à Ruby sur Rails et j'utilise Rails 3.0.9.
Quelle est la difference entre Gemfile
et Gemfile.lock
dans Rails?
Le Gemfile
est l'endroit où vous spécifiez les gems que vous souhaitez utiliser et vous permet de spécifier les versions.
Le fichier Gemfile.lock
Est l'endroit où Bundler enregistre les versions exactes installées. Ainsi, lorsque la même bibliothèque/projet est chargé sur une autre machine, exécuter bundle install
Examinera le Gemfile.lock
Et installera les mêmes versions, plutôt que d'utiliser simplement le Gemfile
et installer les versions les plus récentes. (Exécuter différentes versions sur différentes machines peut entraîner des tests erronés, etc.) Vous ne devriez jamais avoir à éditer directement le fichier de verrouillage.
Consultez objectif et justification de Bundler , en particulier la section Vérification de votre code dans le contrôle de version.
Généralement, nous écrivons des dépendances dans Gemfile en tant que:
gem "nokogiri", "~> 1.4.4"
gem 'bcrypt-Ruby', '~> 3.0.0'
gem 'uglifier', '>= 1.2.3'
..
Ici, vous dites essentiellement: " 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 . Mon Rails applications fonctionnait 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 été remplacée par 1.4.9 . Cela signifie que si nous essayons de construire, bundler installera la version 1.4.9 de nokogiri (supposons que nous n’ayons pas Gemfile.lock
).
Comme vous voyez si vous n'avez pas de Gemfile.lock
et courir:
bundle install
alors les gemmes actuellement utilisées peuvent être différentes à tout moment . Votre application a utilisé la version 1.4.4 et cela fonctionne 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 fonctionnalité géniale que vous avez utilisée avec 1.4.4 n'est plus disponible, etc.
Pour éviter ce genre de problème Gemfile.lock
est utilisé. Dans Gemfile.lock
seules les versions exactes sont écrites et seules celles-ci seront installées. 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 toutes auront la même version . Cela vous donnera une pile de déploiement stable et commune.
Il est automatiquement créé avec le premier:
bundle install
commander. Après cela, à chaque fois que vous exécutez bundle install
, le paquet va d'abord chercher Gemfile.lock
et installez les gemmes spécifiées ici. C'est une habitude de répartir ce fichier entre vos projets pour assurer une stabilité et une cohérence.
Si vous êtes satisfait de la dernière version de vos applications, vous pouvez mettre à jour Gemfile.lock
. Il suffit de refléter vos modifications sur Gemfile
. Cela signifie que vous devez remplacer les dépendances par les nouvelles versions exactes dans Gemfile
. Après cette course:
bundle install
Cela vous mettra à jour Gemfile.lock
avec votre dernière version des applications.
Le Gemfile.lock
Lorsque vous exécutez l’installation d’un ensemble, Bundler conserve les noms complets et les versions de tous les gems que vous avez utilisés (y compris les dépendances des gems spécifiés dans Gemfile (5)) dans un fichier nommé Gemfile.lock.
Bundler utilise ce fichier dans tous les appels ultérieurs relatifs à l'installation d'un ensemble, ce qui garantit que vous utilisez toujours le même code exact, même lorsque votre application se déplace sur plusieurs ordinateurs.
En raison du fonctionnement de la résolution de dépendance, même un changement apparemment mineur (par exemple, une mise à jour ponctuelle de la dépendance d'une gemme dans votre Gemfile (5)) peut entraîner la nécessité de gemmes radicalement différentes pour satisfaire toutes les dépendances.
En conséquence, vous DEVEZ vérifier votre Gemfile.lock dans le contrôle de version. Si vous ne le faites pas, chaque machine qui extrait votre référentiel (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’un des gems de Gemfile (5) ou de leurs dépendances ont été mis à jour.