yaml conf 파일에 병합 해시
YAML은 설정 파일을 작성하기위한 매우 편리합니다. 주요 장점은 그것이 텍스트 파일처럼 보인다는 점이다. 여러분의 설정 파일들이 (없음 계층) 평면이며 어떠한 반복이 없다면 이건 정말 잘 작동합니다.
여러분의 구성 파일에 반복있다면 그것은 이러한 요소를 분리하고이를 재사용하는 것이 가장 중요합니다. 내가 말하려는 건이게 -하자 당신이 설정 파일은 다음과 같습니다 말 :
개발 : 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 사양 이나 위키 피 디아를
지금까지 캐치 여기가 너무 좋아하지만,이 해시 병합은 재귀하지 않습니다. 어떻게 그것이 의미하는 것은 이것이다 : 빨리 두 개의 환경에서 메일에 다른 발신자 이름을 갖고 싶어라고, 당신은 다음 작업을 수행하는 유혹 수 있습니다
기본값 : & 기본값 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 것이 좋습니다. 그러나 어쨌든 당신 전화입니다.



































