دمج التجزئة في ملفات YAML أسيوط
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
على افتراض فوق رمز في / تمة / test.yml هنا هو كيف يمكنك أن تقرأ في بيثون وروبي
$cat readyml.py
#! / البيرة / بن / بيثون الحياة الفطرية من pprint الاستيراد pprint كما PP # في ديبيان تحتاج إلى تثبيت بيثون YAML من YAML استيراد التحميل، التفريغ، load_all التجزئة = حمل (مفتوحة ('/ تمة / test.yml')) ص (التجزئة ['تنمية'])
$ cat readyml.rb
#! / البيرة / بن / روبي الحياة الفطرية يتطلب 'ص' التجزئة = YAML :: تحميل (File.open ('/ تمة / test.yml'). قراءة) PP التجزئة ['تنمية']
هنا هو مفيد 1 بطانة للنسخة روبي
$ ruby -rpp -e 'pp YAML::load(File.open("/tmp/a.yml"))["development"]' أو يمكنك أن تجرب نفسها في مجلس الهجرة واللاجئين أو وحدة بيثون.
نلاحظ أنه في مقتطف الشفرة أعلاه، كل ما هو غير موقع الإخراج هو نفسه في تطوير وإنتاج جزء. هذا هو المكان الذي 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"
$
هل نقول لديك مستوى واحد أكثر من أن تعشش، كذلك يمكنك انبسط بالتأكيد واحدة أكثر من مستوى، ولكن بعد ذلك يصبح فوضى. لذا، إذا كنت لا يحاولون الكتابة إلى حل أبراج هانوي في ملف أسيوط، أنه من الأفضل أن restucture ملف أسيوط من حفر في YAML أو أي شيء آخر. ولكن هذا هو مكالمتك على أي حال.
تعليقات
- تعانى منها
- søgemaskineoptimering
- بنيامين "balupton" ابتون



































