Združujejo v zgoščeni vsebini yaml datotek conf
YAML je zelo priročen za pisanje nastavitvene datoteke. Osnovna prednost je, da je se bere kot besedilno datoteko. Ta deluje zelo dobro, če je vaš config datoteka stanovanje (brez hierarhije) in nima ponovitev.
Če je vaš konfiguracije datoteka ponovitev potem je smiselno izločiti tiste elemente in jih ponovno. Kaj hočem reči je to - recimo, da ste napisali konfiguracijsko datoteko izgleda takole:
razvoj: input_location: common_input output_location: dev_location mail: smtp_server: your_server Prijava: your_login geslo: top_secret produkcija: input_location: common_input output_location: dev_location mail: smtp_server: your_server Prijava: your_login geslo: top_secret
Ob predpostavki, zgornjo kodo v / tmp / test.yml tukaj je, kako si lahko preberete v jezikih Python in Ruby
$cat readyml.py
#! / Usr / bin / env python pprint od uvoza pprint kot ot # V Debian morali namestiti python-yaml od yaml uvoz obremenitve, load_all, smetišče hash = obremenitev (odprto ('/ tmp / test.yml')) odstotne točke (hash ["razvoj"])
$ cat readyml.rb
#! / Usr / bin / env ruby zahtevajo želiš PP ' hash = YAML :: obremenitev (File.open ('/ tmp / test.yml). branje) pp hash ['razvoj']
Tu je priročna podloga za različico 1 ruby
$ ruby -rpp -e 'pp YAML::load(File.open("/tmp/a.yml"))["development"]' ali lahko poskusite enako v IRB ali python konzolo.
Upoštevajte, da v zgornji del kode, je vse drugo kot je izhodna lega enako na področju razvoja in proizvodnje delom. To je, če yml vozlišče identifikator gre za reševanje. Ideja je preprosta imajo vrsto privzete vrednosti in jih preglasijo na drugem mestu.
Lahko bi ga potegnite narazen, kot sledi:
zamude: & Privzeta input_location: common_input output_location: dev_location mail: SENDER_NAME: pošiljatelj smtp_server: your_server Prijava: your_login geslo: top_secret razvoj: <<: * Podrobnosti privzeto produkcija: <<: * Podrobnosti privzeto output_location: prod_location
$ ruby -rpp -e 'pp YAML::load(File.open("/tmp/a.yml"))["development"]["mail"]["login"]'
"your_login"
$
Super, da deluje (tm)!.
Verjetno smo se z njimi trguje nekaj jasnost za malo čarovnijo. Tukaj je majhen razlaga: &, * in <<: in ki je sidro tag lahko razumemo kot vozlišča identifikator, * je vozlišče sklic in <<: pomeni razpršitve dokumentov.
Za več podrobnosti glej bodisi yaml očala ali Izbrani članek
Do sedaj tako dobro, vendar je ulov tukaj, ti zgostitvene združuje so brez rekurzije. Kaj to pomeni je to: recimo, da želite imeti drugačno ime pošiljatelja na pošti v dveh okoljih, vas bo morda zamikalo, da naredite naslednje:
zamude: & Privzeta input_location: common_input output_location: dev_location mail: SENDER_NAME: pošiljatelj smtp_server: your_server Prijava: your_login geslo: top_secret razvoj: <<: * Podrobnosti privzeto mail: SENDER_NAME: sender_dev produkcija: <<: * Podrobnosti privzeto output_location: prod_location mail: SENDER_NAME: sender_prod
Omogoča pregled
$ ruby -rpp -e 'pp YAML::load(File.open("/tmp/a.yml"))["development"]["mail"]["login"]'
nil
$
Ups, kaj je šlo narobe, problem, kot je navedeno zgoraj, je, da hash spajanje ni rekurzivna in hkrati združitev je zamenjala naslov neplačila po pošti proizvodnje, ki ima samo eno tipko. Rešitev / delo okoli je Dogaja še eno stopnjo:
common_settings: & common_settings input_location: common_input output_location: dev_location mail_defaults: & mail_defaults SENDER_NAME: pošiljatelj smtp_server: your_server Prijava: your_login geslo: top_secret zamude: & Privzeta <<: * Podrobnosti common_settings mail: <<: * Podrobnosti mail_defaults razvoj: <<: * Podrobnosti privzeto produkcija: <<: * Podrobnosti privzeto mail: <<: * Podrobnosti mail_defaults SENDER_NAME: sender_prod
Omogoča preverjanje še enkrat
$ ruby -rpp -e 'pp YAML::load(File.open("/tmp/a.yml"))["development"]["mail"]["login"]'
"your_login"
$
Ali ste, da imate še eno raven gnezdenja, pa lahko zagotovo Dogaja še eno raven, potem pa postane nered. Torej, če se ne poskuša pisati rešitev stolpi Hanoju v conf datoteke, je bolje, da restucture conf datoteko kot kopanje v yaml ali kaj drugega. Ampak to je vaš klic vseeno.
Komentarji
- dogging
- sřgemaskineoptimering
- Benjamin "balupton" LUPTON



































