До сих пор я использовал только database.yml с каждым явно вызванным параметром, в приведенном ниже файле используются некоторые символы, которые я не понимаю. Что означает каждая строка и символ (&, *, <<), как мне прочитать этот файл?
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
источник
источник
Ответы:
В
&
метках псевдоним для узла (в вашем примере&default
псевдонимах узел разработки , как « по умолчанию») и*
ссылается на алиас узел с именем « по умолчанию».<<:
Вставляет содержимое этого узла.Позвольте мне процитировать спецификацию YAML здесь:
Так что части вашего примера
на самом деле расширить до
и в то же время сделать узел «test» также доступным под псевдонимом «test».
Посмотрите спецификацию YAML - 2.2 Структуры для получения дополнительной информации (или если вам нужны даже moar docs ++: 3.2.2.2. Якоря и псевдонимы )
источник
<<: *default
его перезаписи. С YAML он производит{"development"=>{"adapter"=>"postgresql", "database"=>"dev_development"}, "test"=>{"adapter"=>"postgresql", "database"=>"test_test"}}
&default
означает, что вы помечаете этот набор атрибутов некоторым именем для дальнейшего использования<<: *default
означает, что вы включаете все атрибуты из группы, помеченные как стандартныеисточник
Они представляют ссылки на узлы (*) и объединения ассоциативных массивов (<<), которые ссылаются на узел, помеченный тегом привязки (&) - wikipedia
Попробуйте сами в Интернете .
источник
Они являются способом обращения к средам без необходимости повторять одни и те же настройки снова и снова (СУШИТЕ это).
&test
создает ссылку на эти конкретные настройки.<<: *default
говорит использовать настройки по умолчанию для тестаИтак, теперь мы знаем, что
cucumber
мы хотим использовать настройки изtest
.источник
Проще говоря, это понятие напоминает базовый и производный класс.
В шаблоне базового класса вы упоминаете все общие детали с помощью '&', что означает, что его можно использовать для расширения другого раздела yaml, которому нужны эти поля. Теперь, когда вы создаете другой раздел, который является надмножеством значений конфигурации этой структуры типа «базовый класс», вы используете «*» вместе с привязкой базового класса (т. Е. Тот, который начинается с «&»). Вы используете «<<:» в качестве понятия yaml для фактического размещения раздела «базовый класс», который вы можете переопределить позже.
Но если вы не хотите переопределять расширенные поля, вы можете пропустить '<<:'
источник