Do tej pory używałem tylko database.yml z każdym parametrem wywołanym jawnie, w poniższym pliku używa niektórych znaków, których nie rozumiem. Co oznacza każdy wiersz i symbol (&, *, <<), jak odczytać ten plik?
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
źródło
źródło
Odpowiedzi:
Te
&
znaki aliasem dla węzła (W przykładzie&default
aliasów Węzeł rozwój jako „default”) i*
References aliased węzeł o nazwie „default”. Plik<<:
Wstawia zawartość tego węzła.Pozwólcie, że przytoczę tutaj specyfikację YAML:
A więc część twojego przykładu
faktycznie rozszerzyć do
i jednocześnie udostępniaj węzeł „test” również pod aliasem „test”.
Zapoznaj się ze specyfikacją YAML - 2.2 Struktury, aby uzyskać dalsze szczegóły (lub jeśli potrzebujesz nawet moar docs ++: 3.2.2.2. Anchors and Aliases )
źródło
<<: *default
nadpisaniu go. Z YAML produkuje{"development"=>{"adapter"=>"postgresql", "database"=>"dev_development"}, "test"=>{"adapter"=>"postgresql", "database"=>"test_test"}}
&default
oznacza, że nadajesz temu zestawowi atrybutów etykietę do późniejszego wykorzystania<<: *default
oznacza, że uwzględniasz wszystkie atrybuty z grupy oznaczonej jako domyślnaźródło
Reprezentują one odniesienia do węzłów (*) i asocjacyjne połączenia tablicowe (<<), które odnoszą się do węzła oznaczonego tagiem kotwicy (&) - Wikipedia
Wypróbuj sam online .
źródło
Są sposobem na odniesienie się do środowisk bez konieczności ciągłego powtarzania tych samych ustawień (DRY it up).
&test
tworzy odniesienie do tych konkretnych ustawień.<<: *default
mówi, użyj domyślnych ustawień testuWięc teraz wiemy,
cucumber
że chcemy użyć ustawień ztest
.źródło
W prostych słowach pojęcie to przypomina klasę bazową i pochodną.
W szablonie klasy bazowej wymieniasz wszystkie typowe szczegóły za pomocą znaku „&”, co oznacza, że można go użyć do rozwinięcia innej sekcji yaml, która wymaga tych pól. Teraz, kiedy tworzysz kolejną sekcję, która jest nadzbiorem wartości konfiguracyjnych tej struktury typu „klasa bazowa”, używasz „*” wraz z kotwicą klasy bazowej (tj. Ta, która zaczyna się od „&”). Używasz '<<:' jako pojęcia yaml do faktycznego umieszczania sekcji 'klasy bazowej', którą możesz zmienić później.
Ale jeśli nie chcesz zastępować rozszerzonych pól, możesz pominąć „<<:”
źródło