Je suis en quelque sorte nouveau sur bundler et les fichiers qu'il génère. J'ai une copie d'un dépôt git de GitHub auquel beaucoup de gens ont contribué, j'ai donc été surpris de constater que le bundler a créé un fichier qui n'existait pas dans le dépôt et n'était pas dans la .gitignore
liste.
Depuis que je l'ai forké, je sais que l'ajouter au référentiel ne cassera rien pour le référentiel principal, mais si je fais une demande de pull, cela causera-t-il un problème?
Doit Gemfile.lock
être inclus dans le référentiel?
git
version-control
bundler
aarona
la source
la source
Réponses:
En supposant que vous n'écrivez pas un rubygem, Gemfile.lock devrait être dans votre référentiel. Il est utilisé comme un instantané de toutes vos gemmes requises et de leurs dépendances. De cette façon, bundler n'a pas à recalculer toutes les dépendances de gemmes à chaque déploiement, etc.
Du commentaire de cowboycoded ci-dessous:
Voici un bel article expliquant ce qu'est le fichier de verrouillage.
la source
Le vrai problème se produit lorsque vous travaillez sur une application Rails open-source qui doit disposer d'un adaptateur de base de données configurable. Je développe la branche Rails 3 de Fat Free CRM. Ma préférence est postgres, mais nous voulons que la base de données par défaut soit mysql2.
Dans ce cas,
Gemfile.lock
doit toujours être archivé avec l'ensemble de gemmes par défaut, mais je dois ignorer les modifications que j'ai apportées à celui-ci sur ma machine. Pour ce faire, je lance:et inverser:
Il est également utile d'inclure quelque chose comme le code suivant dans votre
Gemfile
. Cela charge la gemme d'adaptateur de base de données appropriée, basée sur votre database.yml.Je ne peux pas dire si c'est une bonne pratique établie ou non, mais cela fonctionne bien pour moi.
la source
Mes collègues et moi avons différents Gemfile.lock, car nous utilisons différentes plates-formes, fenêtres et mac, et notre serveur est Linux.
Nous décidons de supprimer Gemfile.lock dans le référentiel et de créer Gemfile.lock.server dans git repo, tout comme database.yml. Ensuite, avant de le déployer sur le serveur, nous copions Gemfile.lock.server dans Gemfile.lock sur le serveur à l'aide du crochet de déploiement de capuchon
la source
En accord avec r-dub, gardez-le sous contrôle de source, mais pour moi, le véritable avantage est le suivant:
collaboration dans des environnements identiques (sans tenir compte des trucs windohs et linux / mac). Avant Gemfile.lock, le prochain mec à installer le projet pourrait voir toutes sortes d'erreurs déroutantes, se blâmer, mais il était juste ce gars chanceux obtenant la prochaine version de super gem, brisant les dépendances existantes.
Pire encore, cela s'est produit sur les serveurs, obtenant une version non testée à moins d'être discipliné et d'installer la version exacte. Gemfile.lock rend cela explicite, et il vous dira explicitement que vos versions sont différentes.
Remarque: n'oubliez pas de regrouper les choses, comme: développement et: test
la source
Les documents de Bundler abordent également cette question:
ORIGINAL: http://gembundler.com/v1.3/rationale.html
EDIT: http://web.archive.org/web/20160309170442/http://bundler.io/v1.3/rationale.html
Consultez la section intitulée «Vérification de votre code dans le contrôle de version»:
la source
Aucun Gemfile.lock signifie:
-> Vérifiez toujours dans Gemfile.lock, faites supprimer travis si vous voulez être très complet https://grosser.it/2015/08/14/check-in-your-gemfile-lock/
la source
Un peu tard pour la fête, mais les réponses m'ont tout de même pris du temps et des lectures étrangères pour comprendre ce problème. Je veux donc résumer ce que j'ai découvert sur Gemfile.lock.
Lorsque vous créez une application Rails, vous utilisez certaines versions de gemmes sur votre machine locale. Si vous voulez éviter les erreurs dans le mode de production et les autres branches, vous devez utiliser ce fichier Gemfile.lock partout et dire à bundler de
bundle
reconstruire les gemmes à chaque fois qu'il change.Si
Gemfile.lock
a changé sur votre machine de production et que Git ne vous le permet pasgit pull
, vous devez écriregit reset --hard
pour éviter ce changement de fichier et réécriregit pull
.la source