[ruby-on-rails] 이 database.yml 파일에서 &, <<, *의 의미는 무엇입니까?

지금까지는 각 매개 변수가 명시 적으로 호출 된 database.yml 만 사용했으며 아래 파일에서 이해할 수없는 문자가 사용되었습니다. 각 줄과 기호 (&, *, <<)는 무엇을 의미합니까?이 파일을 어떻게 읽습니까?

development: &default
  adapter: postgresql
  database: dev_development

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


cucumber:
  <<: *test

production:
  <<: *default
  database: test_production



답변

&(귀하의 예제에서 마크 노드의 별명 &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 구조 를 참조하십시오 (또는 심지어 moar docs ++가 필요한 경우 : 3.2.2.2. 앵커 및 별칭 )


답변

&default 나중에 사용할 수 있도록이 속성 집합에 이름을 레이블로 지정했음을 의미합니다.

<<: *default 기본으로 분류 된 그룹의 모든 속성을 포함 함을 의미합니다.


답변

이러한 앵커 노드로 라벨링 () 태그를 참조 노드 레퍼런스 (*)과 연관 배열 병합 (<<) 대표 – 위키을

온라인으로 직접 사용해보십시오 .


답변

동일한 설정을 반복해서 반복하지 않고도 환경을 참조 할 수있는 방법입니다 (건조).

test: &test
  <<: *default

&test 특정 설정에 대한 참조를 만듭니다.

<<: *default 테스트에 기본 설정을 사용한다고 말합니다.

cucumber:
  <<: *test

이제 우리는 cucumber의 설정을 사용하고 싶다는 것을 알고 있습니다 test.


답변

간단히 말해서,이 개념은 기본 클래스와 파생 클래스와 유사합니다.

기본 클래스 템플릿에서 ‘&’로 모든 공통 세부 사항을 언급하므로 이러한 필드가 필요한 다른 yaml 섹션을 확장하는 데 사용할 수 있습니다. 이제이 ‘기본 클래스’유형 구조의 구성 값으로 구성된 다른 섹션을 작성할 때 기본 클래스 앵커와 함께 ‘*’를 사용하십시오 (예 : ‘&’로 시작하는 섹션). 실제로 ‘기본 클래스’섹션을 배치하기 위해 ‘<< :’을 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

그러나 확장 필드를 무시하지 않으려면 ‘<< :’를 건너 뛸 수 있습니다.


답변