Quelle est la différence entre gemfile et gemfile.lock dans ruby on rails ?

Créé le 12 Dec 2022 - Mis à jour le 04 Jul 2023 - Créé par Fabien Berthoux - ruby-on-railsruby

Gemfile et Gemfile.lock sont tous deux des fichiers qui font partie de Ruby on Rails. Gemfile est le fichier qui contient les informations sur les gems (ou bibliothèques) dont une application Ruby on Rails a besoin pour fonctionner. Gemfile.lock, quant à lui, est un fichier qui contient une liste des gems exacts (avec leurs numéros de version) qui sont installés sur l'application. Il est généré automatiquement lorsque l'on installe ou met à jour des gems dans un projet Ruby on Rails.

Bien que ces deux fichiers aient des objectifs similaires, il existe quelques différences notables entre eux. Tout d'abord, Gemfile est un fichier modifiable et Gemfile.lock est un fichier généré automatiquement. Gemfile est le fichier qui contient les informations sur les gems dont une application Ruby on Rails a besoin pour fonctionner, alors que Gemfile.lock est le fichier qui contient la liste exacte des gems installés sur l'application. Lorsque l'on modifie le Gemfile, le Gemfile.lock est mis à jour automatiquement. De plus, Gemfile.lock est un fichier qui ne doit pas être modifié manuellement, car les modifications peuvent entraîner des erreurs.

Pour illustrer cela, considérons l'exemple suivant :

# Gemfile
gem 'rails', '5.0.0'
# Gemfile.lock
GEM
  remote: https://rubygems.org/
  specs:
    rails (5.0.0)
      actioncable (= 5.0.0)
      actionmailer (= 5.0.0)
      actionpack (= 5.0.0)
      actionview (= 5.0.0)
      activemodel (= 5.0.0)
      activerecord (= 5.0.0)
      activesupport (= 5.0.0)
      bundler
      railties (= 5.0.0)

Dans cet exemple, le Gemfile définit le numéro de version de Rails à 5.0.0. Le Gemfile.lock, d'autre part, contient une liste des gems exacts qui sont installés lorsque l'on installe la gem Rails 5.0.0. Si l'on modifie le Gemfile et que l'on spécifie une version plus récente, le Gemfile.lock sera mis à jour automatiquement pour refléter cette version.

Questions supplémentaires

Comment le Gemfile et le Gemfile.lock sont-ils liés ?


Le Gemfile et le Gemfile.lock sont directement liés. Lorsque l'on modifie le Gemfile, le Gemfile.lock est mis à jour automatiquement pour refléter les modifications. Il est important de noter que le Gemfile.lock ne doit pas être modifié manuellement, car les modifications peuvent entraîner des erreurs.

Comment puis-je mettre à jour les gems dans un projet Ruby on Rails ?


Pour mettre à jour les gems dans un projet Ruby on Rails, il suffit de modifier le Gemfile et de lancer la commande 'bundle install' à partir de la ligne de commande pour installer les nouveaux gems. Le Gemfile.lock sera automatiquement mis à jour pour refléter les modifications.

Que se passe-t-il si je modifie directement le Gemfile.lock ?


Il est fortement déconseillé de modifier le Gemfile.lock directement, car les modifications peuvent entraîner des erreurs inattendues. Il est préférable de modifier le Gemfile et de lancer la commande 'bundle install' pour mettre à jour le Gemfile.lock.

Quels sont les avantages d'utiliser le Gemfile et le Gemfile.lock ?


L'utilisation des Gemfile et Gemfile.lock a de nombreux avantages. Le Gemfile permet aux développeurs de spécifier les gems dont une application Ruby on Rails a besoin. Le Gemfile.lock, quant à lui, assure que tous les développeurs travaillant sur le projet utilisent les mêmes versions des gems, ce qui garantit la cohérence entre les différentes machines et environnements.