Bisher habe ich nur database.yml für jeden explizit aufgerufenen Parameter verwendet. In der folgenden Datei werden einige Zeichen verwendet, die ich nicht verstehe. Was bedeutet jede Zeile und jedes Symbol (&, *, <<), wie lese ich diese Datei?
development: &default
adapter: postgresql
database: dev_development
test: &test
<<: *default
database: test_test
cucumber:
<<: *test
production:
<<: *default
database: test_production
ruby-on-rails
database-connection
yaml
alias
cross-reference
OpenCoderX
quelle
quelle
Antworten:
Das
&
markiert einen Alias für den Knoten (in Ihrem Beispiel&default
aliasiert der Entwicklungsknoten als "Standard") und*
verweist auf den Alias-Knoten mit dem Namen "Standard". Das<<:
fügt den Inhalt dieses Knotens ein.Gestatten Sie mir, die YAML-Spezifikation hier zu zitieren:
Also Teile Ihres Beispiels
tatsächlich erweitern auf
und gleichzeitig den "Test" -Knoten auch unter dem Alias "Test" verfügbar machen.
Weitere Informationen finden Sie in der YAML-Spezifikation - 2.2 Strukturen (oder wenn Sie noch mehr Dokumente benötigen ++: 3.2.2.2. Anker und Aliase )
quelle
<<: *default
überschrieben wurde. Mit YAML produziert es{"development"=>{"adapter"=>"postgresql", "database"=>"dev_development"}, "test"=>{"adapter"=>"postgresql", "database"=>"test_test"}}
&default
bedeutet, dass Sie diese Attribute mit einem Namen für die spätere Verwendung kennzeichnen<<: *default
bedeutet, dass Sie alle Attribute aus der Gruppe einschließen, die als Standard gekennzeichnet sindquelle
Diese stellen Knotenreferenzen (*) und assoziative Array-Zusammenführungen (<<) dar, die sich auf einen Knoten beziehen, der mit einem Ankertag (&) gekennzeichnet ist - Wikipedia
Probieren Sie es selbst online aus .
quelle
Sie sind eine Möglichkeit, Umgebungen zu referenzieren, ohne dieselben Einstellungen immer wieder wiederholen zu müssen (DRY it up).
&test
Erstellt einen Verweis auf diese spezifischen Einstellungen.<<: *default
sagt, verwenden Sie die Standardeinstellungen für den TestJetzt wissen wir also, dass
cucumber
wir die Einstellungen von verwenden möchtentest
.quelle
In einfachen Worten ähnelt dieser Begriff der Basisklasse und der abgeleiteten Klasse.
In der Basisklassenvorlage erwähnen Sie alle allgemeinen Details mit '&'. Dies bedeutet, dass Sie damit den anderen Yaml-Abschnitt erweitern können, der diese Felder benötigt. Wenn Sie jetzt einen anderen Abschnitt erstellen, der eine Obermenge der Konfigurationswerte dieser Typstruktur vom Typ 'Basisklasse' enthält, verwenden Sie das '*' zusammen mit dem Basisklassenanker (dh dem mit '&' begonnenen). Sie verwenden '<<:' als Yaml-Begriff, um den Abschnitt 'Basisklasse' tatsächlich zu platzieren, den Sie später überschreiben können.
Wenn Sie die erweiterten Felder jedoch nicht überschreiben möchten, können Sie '<<:' überspringen.
quelle