yaml conf 파일에 병합 해시
YAML은 구성 파일을 작성하기위한 매우 편리합니다. 차 이점이있다, 그것은 텍스트 파일처럼 읽습니다. 여러분의 설정 파일 (NO 계층) 평면이며 반복이없는 경우이 정말 잘 작동합니다.
여러분의 구성 파일은 다음 반복이있다면 그것은 이러한 요소를 분리하고이를 재사용하는 의미가 있습니다. 내 말뜻이있다 - 가자 당신이 설정 파일은 다음과 같습니다 말 :
개발 : input_location : common_input output_location : dev_location 이메일 : smtp_server : your_server 로그인 : your_login 비밀 번호 : top_secret 생산 : input_location : common_input output_location : dev_location 이메일 : smtp_server : your_server 로그인 : your_login 비밀 번호 : top_secret
/ tmp를 / 여기에 코드 test.yml 위에 있다고 가정하면 어떻게 파이썬과 루비에서 읽을 수있다
$cat readyml.py
#!는 / usr / 빈 / 환경을 파이썬 PP로 pprint 가져오기 pprint에서 # 데비안의 파이썬 yaml를 설치할 필요가 yaml 가져오기로드, load_all, 덤프에서 해시 = 불러오기 (오픈 ( '/ tmp를 / test.yml')) PP (해시 [ '개발'])
$ cat readyml.rb
#!는 / usr / 빈 / 환경을 루비 'PP'를 요구 해시 = YAML : :로드 (File.open ( '/ tmp를 / test.yml') 참조하시기 바랍니다.) PP 해시 [ '발전']
여기에 루비 버전에 대한 편리한 한 라이너입니다
$ ruby -rpp -e 'pp YAML::load(File.open("/tmp/a.yml"))["development"]' 하거나 irb 또는 파이썬 콘솔에서 동일하게 시도해 볼 수 있습니다.
위의 코드 조각에서 모든 출력 위치가 개발 및 생산 부분에 동일 이외입니다. yml 노드 식별자 구조에 관해서 곳이예요. 아이디어는 기본값 집합을 가지고 있으며 서로 다른 장소에서 그들을 무시 간단합니다.
다음과 같이 그것을 따로 마련할 수 있죠 :
기본값 : & 기본값 input_location : common_input output_location : dev_location 이메일 : SENDER_NAME : 보낸 사람 smtp_server : your_server 로그인 : your_login 비밀 번호 : top_secret 개발 : <<: * 기본적으로 생산 : <<: * 기본적으로 output_location : prod_location
$ ruby -rpp -e 'pp YAML::load(File.open("/tmp/a.yml"))["development"]["mail"]["login"]'
"your_login"
$
좋아요,이 작품 (TM)!.
확실하게 우리는 마법의 조금을위한 선명도를 바꿨습니다. 여기 작은 설명입니다 : &, *와 <<: & 어느 앵커 태그가 노드 식별자로 이해할 수있다 *이 노드 참조하고 <<: 해시 병합을 의미합니다.
자세한 내용은 중보고 yaml 사양 이나 위키백과 (Wikipedia)는
아직까지는 좋아하지만 잡기가 여기있다,이 해시 병합은 재귀하지 않습니다. 어떻게 그것이 의미하는 것은 이것이다 :하자 당신이 두 환경에서 메일에 대해 다른 발신자 이름을 갖고 싶어 말하자면, 당신은 다음 작업을 수행하는 유혹 수 있습니다
기본값 : & 기본값 input_location : common_input output_location : dev_location 이메일 : SENDER_NAME : 보낸 사람 smtp_server : your_server 로그인 : your_login 비밀 번호 : top_secret 개발 : <<: * 기본적으로 이메일 : SENDER_NAME : sender_dev 생산 : <<: * 기본적으로 output_location : prod_location 이메일 : SENDER_NAME : sender_prod
확인할 수 있습니다
$ ruby -rpp -e 'pp YAML::load(File.open("/tmp/a.yml"))["development"]["mail"]["login"]'
nil
$
죄송합니다, 뭔가 잘못되었을뿐 위에서 언급한 문제는 해시 재귀 병합되지 않고 병합 동안 단 하나의 열쇠를 갖고 생산 우편으로 기본의 메일을 교체한다는 것입니다. 주위 솔루션 / 작품 하나 더 수준을 풀다하는 것입니다 :
common_settings : & common_settings input_location : common_input output_location : dev_location mail_defaults : & mail_defaults SENDER_NAME : 보낸 사람 smtp_server : your_server 로그인 : your_login 비밀 번호 : top_secret 기본값 : & 기본값 <<: * common_settings 이메일 : <<: * mail_defaults 개발 : <<: * 기본적으로 생산 : <<: * 기본적으로 이메일 : <<: * mail_defaults SENDER_NAME : sender_prod
다시 확인하실 수 있습니다
$ ruby -rpp -e 'pp YAML::load(File.open("/tmp/a.yml"))["development"]["mail"]["login"]'
"your_login"
$
당신이 하나 더 수준을 가지고 당신이 말했어요 중첩, 그럼 당신은 분명히 하나 더 수준을 풀다 수 있지만, 다음은 엉망이됩니다. 그래서, 당신은 conf 파일 파일에 하노이 타워의 솔루션을 작성하려고하지 않는 경우, 그것은 yaml 아니면 뭔가에 파고보다 믿어 파일을 restucture 것이 좋습니다. 그러나 어쨌든 전화입니다.
댓글
- 가만 놔두지
- søgemaskineoptimering
- 벤자민 "balupton"Lupton



































