Até agora, usei database.yml apenas com cada parâmetro explicitamente chamado, no arquivo abaixo, ele usa alguns caracteres que não entendo. O que significa cada linha e símbolo (&, *, <<), como faço para ler este arquivo?
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
fonte
fonte
Respostas:
As
&
marcas de um alias para o nó (no seu exemplo&default
aliases o nó desenvolvimento como "default") e as*
referências ao nó alias com o nome "default". O<<:
insere o conteúdo desse nó.Permita-me citar a especificação YAML aqui:
Então, partes do seu exemplo
realmente expandir para
e, ao mesmo tempo, disponibilize o nó "test" também no alias "test".
Dê uma olhada na especificação YAML - 2.2 Structures para obter mais detalhes (ou se você precisar de documentos moar ++: 3.2.2.2. Âncoras e aliases )
fonte
<<: *default
substituí-la. Com YAML, ele produz #{"development"=>{"adapter"=>"postgresql", "database"=>"dev_development"}, "test"=>{"adapter"=>"postgresql", "database"=>"test_test"}}
&default
significa que você está rotulando esse conjunto de atributos com algum nome para uso posterior<<: *default
significa que você está incluindo todos os atributos do grupo rotulado como padrãofonte
Representam referências de nó (*) e mesclagens associativas de matriz (<<) que se referem a um nó rotulado com uma marca de âncora (&) - wikipedia
Experimente você mesmo online .
fonte
Eles são uma maneira de fazer referência a ambientes sem precisar repetir as mesmas configurações repetidamente (seque-as).
&test
cria uma referência para essas configurações específicas.<<: *default
diz usar as configurações padrão para o testeEntão agora sabemos que
cucumber
queremos usar as configurações detest
.fonte
Em palavras simples, essa noção se assemelha à classe base e derivada.
No modelo de classe base, você menciona todos os detalhes comuns com '&', o que significa que ele pode ser usado para expandir a outra seção do yaml que precisa desses campos. Agora, quando você cria outra seção que é um superconjunto de valores de configuração dessa estrutura do tipo 'classe base', você usa o '*' junto com a âncora da classe base (ou seja, aquela iniciada com '&'). Você usa '<<:' como noção yaml para realmente colocar a seção 'classe base', que você pode substituir posteriormente.
Mas, se você não deseja substituir os campos estendidos, pode pular '<<:'
fonte