Sisteminį maišos yaml conf failus
Yaml yra gana patogu rašyti konfigūracijos failus. Pagrindinis privalumas yra tai, kad ji skamba kaip tekstinį failą. Tai veikia tikrai gerai, jei jūsų konfigūracijos failas yra plokščia (ne hierarchija) ir neturi pakartojimų.
Jei Jūsų konfigūracijos failas yra pakartojimų tada prasminga išskirti šiuos elementus ir pakartotinai juos. Ką reiškia tai, tarkime, jūsų konfigūracijos failas atrodo taip:
plėtra: input_location: common_input output_location: dev_location paštas: smtp_server: your_server Vartotojas: your_login slaptažodis: top_secret gamyba: input_location: common_input output_location: dev_location paštas: smtp_server: your_server Vartotojas: your_login slaptažodis: top_secret
Darant prielaidą, kad virš kodą į / tmp / test.yml čia, kaip jūs galite skaityti python ir Ruby
$cat readyml.py
#! / Usr / bin / env python , iš pprint importo pprint kaip pp # Debian reikia instaliuoti python-yaml yaml importo apkrovos, load_all, sąvartynas hash = apkrova (atvira ('/ tmp / test.yml ")) PP (maišos ["tobulinimas '])
$ cat readyml.rb
#! / Usr / bin / env ruby reikalauti "pp ' hash = yaml :: apkrova (File.open ('/ tmp / test.yml ") ... skaityti) PP maišos ['vystymasis']
čia yra patogus įdėklas ruby versija
$ ruby -rpp -e 'pp YAML::load(File.open("/tmp/a.yml"))["development"]' arba galite pabandyti pats IRB ar python konsolės.
Atkreipkite dėmesį, kad pirmiau kodo fragmentą, viskas išskyrus išėjimo vieta yra pati kūrimo ir gamybos daliai. Tai, kur yml mazgas identifikatorius ateina gelbėti. Idėja yra labai paprasta, numatytųjų reikšmių rinkinį ir perrašyti jas kitoje vietoje.
Jūs galite ištraukti jį išskiria taip:
defaults: ir pagal nutylėjimą input_location: common_input output_location: dev_location paštas: Sender_name: siuntėjas smtp_server: your_server Vartotojas: your_login slaptažodis: top_secret plėtra: <<: * Pagal nutylėjimą gamyba: <<: * Pagal nutylėjimą output_location: prod_location
$ ruby -rpp -e 'pp YAML::load(File.open("/tmp/a.yml"))["development"]["mail"]["login"]'
"your_login"
$
Puiku, ji veikia (tm)!.
Be abejonės mes prekiaujama šiek tiek aiškumo šiek tiek magijos. Čia yra nedidelis paaiškinimas: &, * ir <<: ir kuris yra žymės saito gali būti suprantama kaip mazgo identifikatoriaus * mazgas nuoroda ir <<: reiškia maišos suliejimą.
Dėl išsamesnės informacijos žr. Arba yaml specifikacijų arba Wikipedia
Iki šiol tokia gera, bet čia yra laimikis, šios maišos susilieja nėra rekursinis. Ką tai reiškia yra tokia: tarkime, norite turėti skirtingą dviejų aplinkų paštu siuntėjo vardą, jums gali būti linkusios daryti taip:
defaults: ir pagal nutylėjimą input_location: common_input output_location: dev_location paštas: Sender_name: siuntėjas smtp_server: your_server Vartotojas: your_login slaptažodis: top_secret plėtra: <<: * Pagal nutylėjimą paštas: Sender_name: sender_dev gamyba: <<: * Pagal nutylėjimą output_location: prod_location paštas: Sender_name: sender_prod
Leidžia patikrinti,
$ ruby -rpp -e 'pp YAML::load(File.open("/tmp/a.yml"))["development"]["mail"]["login"]'
nil
$
Oi, kažkas nutiko, kaip minėta problema yra ta, kad maišos suliejimas nėra rekursinis o sujungus jis pakeitė laišką įsipareigojimų nevykdymo paštu produkcija, kuri turi tik vieną klavišą. Sprendimas / darbas aplink išsivynioti daugiau vieną lygį:
common_settings: & common_settings input_location: common_input output_location: dev_location mail_defaults: ir mail_defaults Sender_name: siuntėjas smtp_server: your_server Vartotojas: your_login slaptažodis: top_secret defaults: ir pagal nutylėjimą <<: * Common_settings paštas: <<: * Mail_defaults plėtra: <<: * Pagal nutylėjimą gamyba: <<: * Pagal nutylėjimą paštas: <<: * Mail_defaults Sender_name: sender_prod
Leidžia patikrinti dar kartą
$ ruby -rpp -e 'pp YAML::load(File.open("/tmp/a.yml"))["development"]["mail"]["login"]'
"your_login"
$
Ar jūs kalbate, jūs turite dar vieną lygį, lizdus, gerai jūs tikrai gali išsivynioti dar vieną lygį, bet tada ji tampa netvarka. Taigi, jei esate ne bando parašyti sprendimą bokštus Hanojus conf faile, geriau, į restucture conf failą ne kasti į yaml ar kažkas kita. Bet tai jūsų skambutis vistiek.



































