到目前为止,我只使用数据库。yml中的每个参数都显式地调用,在下面的文件中,它使用了一些我不理解的字符。每一行和符号(&,*,<<)是什么意思?我如何读取这个文件?

development: &default
  adapter: postgresql
  database: dev_development

test: &test
  <<: *default
  database: test_test


cucumber:
  <<: *test

production:
  <<: *default
  database: test_production

&default意味着你给这组属性加上了一些名称,以备以后使用

<<: *default表示包含了标记为default的组中的所有属性


它们是一种引用环境的方式,而不必一遍又一遍地重复相同的设置(DRY)。

test: &test
  <<: *default

&test创建对这些特定设置的引用。

<<: *default表示使用测试的默认设置

cucumber:
  <<: *test

现在我们知道,对于黄瓜,我们想要使用test中的设置。


&标记节点的别名(在示例中&default将开发节点别名为“default”),*引用别名为“default”的节点。<<:插入该节点的内容。

请允许我在这里引用YAML规范:

重复的节点(对象)首先由一个锚(用&号-“&”标记)标识,然后被别名(用星号-“*”引用)。

这是你的例子的一部分

development: &default
  adapter: postgresql
  database: dev_development

test: &test
  <<: *default
  database: test_test

实际上展开到

development: &default
  adapter: postgresql
  database: dev_development

test: &test
  adapter: postgresql       # from the "default" alias
  database: test_test       # overridden by the duplicate key

同时使“test”节点在别名“test”下也可用。

查看YAML规范- 2.2 Structures以获得更多细节(或者如果你需要moar docs++: 3.2.2.2)。锚和别名)


这些表示节点引用(*)和关联数组合并(<<),它们引用带有锚(&)标记的节点——wikipedia

自己上网试试吧。


简单地说,这个概念类似于基类和派生类。

在基类模板中,您使用“&”提到了所有常见的细节,这意味着它可以用于展开需要这些字段的其他yaml节。 现在,当你创建另一个section,它是这个'基类'类型结构的配置值的超集时,你使用'*'和基类锚(即以'&'开头的锚)。你使用'<<:'作为yaml概念来实际放置'基类'部分,你可以稍后重写。

vsm:
  stub_nsx_mgr: &MGR_CTRL_STUB
    username: ADMIN
    password: $DEFAULT_PASSWORD
    deployment: ovf
    build: $PR_BUILD
    vmnics:
      - network: $MANAGEMENT_NETWORK_0
    vc: vc_0
    ovf_options:
      - --diskMode=$DISKMODE
      - --deploymentOption=$DEPLOYMENT_OPTION
$MGR_0:
    <<: *MGR_CTRL_STUB
    ovf_path_regex: 'appliance.*\.ovf'
    ovf_options:
      - --diskMode=$DISKMODE
      - --deploymentOption=$DEPLOYMENT_OPTION
$CTRL_0:
    <<: *MGR_CTRL_STUB
    ovf_options:
      - --diskMode=$DISKMODE
      - --allowExtraConfig
$CTRL_1:
    *MGR_CTRL_STUB

但是,如果你不想覆盖扩展字段,你可以跳过'<<:'