دمج التجزئة في ملفات YAML أسيوط

31 يوليو 2009 بواسطة براشانت
قدم تحت : التكنولوجيا

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 كما ص
 # في ديبيان تحتاج إلى تثبيت بيثون YAML
 تحميل من استيراد YAML ، load_all ، تفريغ
 التجزئة = تحميل (فتح ('/ تمة / test.yml'))
 ص (التجزئة ['التنمية']) 


$ cat readyml.rb

  #! / البيرة / بن / روبي الحياة الفطرية
 يتطلب 'ص'
 التجزئة = YAML : : تحميل (File.open ('/ تمة / test.yml') القراءة.)
 ص التجزئة ['التنمية'] 

هنا هو مفيد one بطانة للنسخة روبي
$ 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 أو أي شيء آخر. ولكن هذا هو مكالمتك على أي حال.

تعليقات

التعليقات على تجزئات دمج في ملفات YAML أسيوط

  1. الاشياء الحق في يوم السبت ، 30 يناير 2010 07:33
  2. أشعل النار ، ويسرد YAML بناء التكوين...

    ...

  3. بنيامين "balupton" ابتون يوم أحد ، 19 سبتمبر 2010 11:13
  4. نعم مزعج لا دمج بشكل متكرر. وكنت قادرا على تقديم الحل البديل في مكتبتي balphp.

  5. søgemaskineoptimering يوم أحد ، 27 فبراير 2011 11:40
  6. وقال شخص مطلع على الصفقة ان الجانبين ما زالوا خارج تجزئة اسما للشركة المدمجة. لكنه قال ان هذا الشخص فكرة يجري النظر فيها هو اختيار الاسم الذي ليس لديه كلمة "دويتشه" أو اختصارا "بورصة نيويورك" في ذلك. ...

  7. يؤرخ يوم أربعاء ، 1 يونيو 2011 08:15
  8. كامل 453 صفحة تتضمن الوثيقة أيضا المجالات المحتملة لل
    الدمج ، بما في ذلك خصخصة التقاط القمامة ، ودمج والمدينة
    واين كاونتي الإدارات الصحية والشراكة مع مدارس ديترويت العامة على
    الترويح عن النفس. فإن الاقتراح لا يشمل أي...

قل لي ما كنت أفكر...
وأوه ، إذا كنت ترغب في الموافقة المسبقة عن علم لتظهر مع تعليقك ، الذهاب الحصول على gravatar !