&,<<,*在这个database.yml文件中的含义是什么?

时间:2011-07-11 14:00:56

标签: ruby-on-rails database-connection yaml alias cross-reference

到目前为止,我只使用了database.yml,每个参数都被明确调出,在下面的文件中,它使用了一些我不理解的字符。每行和符号(&,*,<<<)的含义是什么,我如何阅读此文件?

development: &default
  adapter: postgresql
  database: dev_development

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


cucumber:
  <<: *test

production:
  <<: *default
  database: test_production

5 个答案:

答案 0 :(得分:163)

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

请允许我在此引用YAML规范:

  

重复节点(对象)首先由锚点标记(用&符号标记 - “&amp;”),然后别名(用星号 - “*”引用)。

你的例子的部分内容

test: &test
  <<: *default

实际上扩展到

test: &test
  adapter: postgresql       # from the "default" alias
  database: dev_development # from the "default" alias

并同时使别名“test”下的“test”节点可用。 请查看YAML specification - 2.2 Structures以获取更多详细信息(或者如果您甚至需要moar docs ++:3.2.2.2. Anchors and Aliases

答案 1 :(得分:9)

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

亲自尝试online

答案 2 :(得分:8)

&default表示您使用某个名称标记这组属性以供日后使用

<<: *default表示您包含标记为默认

的组中的所有属性

答案 3 :(得分:2)

它们是一种引用环境的方法,无需反复重复相同的设置(干掉它)。

test: &test
  <<: *default

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

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

cucumber:
  <<: *test

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

答案 4 :(得分:1)

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

在基类模板中,您使用'&amp;'提及所有常见细节,这意味着它可用于扩展需要这些字段的其他yaml部分。 现在,当您创建另一个超出此“基类”类型结构的配置值的部分时,您将使用'*'以及基类锚(即以'&amp;'开头的那个)。您使用'&lt;&lt;:'作为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

但是,如果您不想覆盖扩展字段,可以跳过'&lt;&lt;:'