Pinagsasama hashes sa yaml file Conf
YAML ay lubos na madaling gamitin para sa pagsulat ng mga file ng configuration. Ang pangunahing bentahe ay na, ito bumabasa tulad ng text file. Talaga ito gumagana rin kung ang iyong config file ay flat (walang hierarchy) at may walang repetitions.
Kung ang iyong configuration file ay mga repetitions pagkatapos ito ang akma upang paghiwalayin ang mga elemento at muling gamitin ang mga ito. Ano ang ibig sabihin ko ay ito - sabihin natin mo ang iyong config file ay ganito ang hitsura:
pag-unlad: input_location: common_input output_location: dev_location mail: smtp_server: your_server login: your_login password: top_secret produksyon: input_location: common_input output_location: dev_location mail: smtp_server: your_server login: your_login password: top_secret
Ipagpalagay itaas code sa / tmp / test.yml na dito ay kung paano maaari mong basahin sa python at mapula
$cat readyml.py
#! / Usr / bin / env sawa mula sa ng pprint import pprint ng pp # Sa Debian kailangan i-install ang python-yaml Sa mula yaml import ng pagkarga, dump load_all, hash = load (bukas ('/ tmp / test.yml na')) pp (hash ['pagbuo'])
$ cat readyml.rb
#! / Usr / bin / env rubi nangangailangan ng 'pp' hash = YAML :: load (File.open ('/ tmp / test.yml na'). basahin) pp hash ['pagbuo']
dito ay isang madaling isa liner para sa rubi bersyon
$ ruby -rpp -e 'pp YAML::load(File.open("/tmp/a.yml"))["development"]' o maaari mong subukan ang parehong sa irb o python console.
Tandaan na sa itaas na snippet ng code, ang lahat ay iba na output lokasyon ay parehong sa bahagi ng pag-unlad at produksyon. Ito ay kung saan yml node identifier pagdating sa iligtas. Ang ideya ay simpleng magkaroon ng isang hanay ng mga halaga ng default at sapawan ang mga ito sa ibang lugar.
Maaari mong hilahin hatiin ito bilang mga sumusunod:
default: & default input_location: common_input output_location: dev_location mail: SENDER_NAME: nagpadala smtp_server: your_server login: your_login password: top_secret pag-unlad: <<: * Default produksyon: <<: * Default output_location: prod_location
$ ruby -rpp -e 'pp YAML::load(File.open("/tmp/a.yml"))["development"]["mail"]["login"]'
"your_login"
$
Mahusay, ito gumagana (tm)!.
Arguably namin traded ilang kalinawan para sa isang bit ng magic. Narito ang isang maliit na paliwanag: &, * at <<: & na ang tag ng anchor ay maaaring maunawaan bilang node identifier, * ay node reference at <<: ibig sabihin para sa hash sumanib.
Para sa karagdagang detalye makita alinman yaml na panoorin o Wikipedia
Sa ngayon kaya magandang ngunit may catch dito, ang mga hash mga merges ay hindi recursive. Ano ang ibig sabihin nito ay ito: sabihin natin na nais mong magkaroon ng iba't ibang pangalan ng nagpadala para sa mail sa dalawang kapaligiran, maaaring tempted upang gawin ang mga sumusunod:
default: & default input_location: common_input output_location: dev_location mail: SENDER_NAME: nagpadala smtp_server: your_server login: your_login password: top_secret pag-unlad: <<: * Default mail: SENDER_NAME: sender_dev produksyon: <<: * Default output_location: prod_location mail: SENDER_NAME: sender_prod
Hinahayaan suriin
$ ruby -rpp -e 'pp YAML::load(File.open("/tmp/a.yml"))["development"]["mail"]["login"]'
nil
$
Oops, isang bagay nagpunta mali, ang problema gaya ng nabanggit sa itaas ay na ang hash sumanib ay hindi recursive at habang pinagsasama ang pinalitan ito ang mail ng default sa pamamagitan ng koreo ng produksyon na kung saan ay may isa sa key lamang. Solusyon / trabaho sa paligid ay sa magkadkad isa pang antas:
common_settings: & common_settings input_location: common_input output_location: dev_location mail_defaults: & mail_defaults SENDER_NAME: nagpadala smtp_server: your_server login: your_login password: top_secret default: & default <<: * Common_settings mail: <<: * Mail_defaults pag-unlad: <<: * Default produksyon: <<: * Default mail: <<: * Mail_defaults SENDER_NAME: sender_prod
Hinahayaan muling suriin
$ ruby -rpp -e 'pp YAML::load(File.open("/tmp/a.yml"))["development"]["mail"]["login"]'
"your_login"
$
Ang sinabi mo mayroon kang isa pang antas ng nesting, well maaari mong tiyak magkadkad isa pang antas, ngunit pagkatapos ay ito ay nagiging isang gulo. Kaya, kung hindi sinusubukan mong isulat ang solusyon sa tower ng Hanoi sa isang Conf file, ito ay mas mahusay sa restucture Conf file sa paghuhukay sa yaml o iba pa. Ngunit na ay pa rin ang iyong tawag.
Mga komento
- dogging
- søgemaskineoptimering
- Benjamin "balupton" Lupton



































