Jusqu'à présent, je n'ai utilisé que database.yml avec chaque paramètre appelé explicitement, dans le fichier ci-dessous, il utilise des caractères que je ne comprends pas. Que signifient chaque ligne et symbole (&, *, <<), comment lire ce fichier?
development: &default
adapter: postgresql
database: dev_development
test: &test
<<: *default
database: test_test
cucumber:
<<: *test
production:
<<: *default
database: test_production
Réponses:
Le
&
marque un alias pour le nœud (dans votre exemple,&default
alias le nœud de développement comme "par défaut") et les*
références au nœud avec le nom "par défaut". Le<<:
insère le contenu de ce nœud.Permettez-moi de citer la spécification YAML ici:
Donc des parties de votre exemple
étendre réellement à
et en même temps rendre le nœud "test" également disponible sous l'alias "test".
Jetez un œil à la spécification YAML - 2.2 Structures pour plus de détails (ou si vous avez besoin même de la documentation moar ++: 3.2.2.2. Anchors and Aliases )
la source
<<: *default
écrasée. Avec YAML il produit{"development"=>{"adapter"=>"postgresql", "database"=>"dev_development"}, "test"=>{"adapter"=>"postgresql", "database"=>"test_test"}}
&default
signifie que vous étiquetez cet ensemble d'attributs avec un nom pour une utilisation ultérieure<<: *default
signifie que vous incluez tous les attributs du groupe étiqueté par défautla source
Ceux-ci représentent des références de nœuds (*) et des fusions de tableaux associatifs (<<) qui font référence à un nœud étiqueté avec une balise d'ancrage (&) - Wikipédia
Essayez-le vous-même en ligne .
la source
Ils sont un moyen de référencer des environnements sans avoir à répéter les mêmes paramètres encore et encore (SÉCHER).
&test
crée une référence à ces paramètres spécifiques.<<: *default
dit utiliser les paramètres par défaut pour le testAlors maintenant, nous savons que
cucumber
nous voulons utiliser les paramètres detest
.la source
En termes simples, cette notion ressemble à la classe de base et dérivée.
Dans le modèle de classe de base, vous mentionnez tous les détails communs avec '&', ce qui signifie qu'il peut être utilisé pour développer l'autre section yaml qui a besoin de ces champs. Maintenant, lorsque vous créez une autre section qui est un sur-ensemble de valeurs de configuration de cette structure de type «classe de base», vous utilisez le «*» avec l'ancre de la classe de base (c'est-à-dire celle qui commence par «&»). Vous utilisez «<<:» comme notion yaml pour placer réellement la section «classe de base», que vous pouvez remplacer plus tard.
Mais, si vous ne souhaitez pas remplacer les champs étendus, vous pouvez ignorer «<<:»
la source