ما هو أفضل بيرل وحدة الهرمية و القابلة للتوريث التكوين ؟

StackOverflow https://stackoverflow.com/questions/647781

سؤال

إذا كان لدي المشروع الجديد, ما هو أفضل ممارسة بيرل على أساس تكوين وحدة للاستخدام ؟

وسوف يكون هناك محفز التطبيق وبعض سطر الأوامر النصية.ينبغي أن تشترك في نفس التكوين.

بعض الميزات أعتقد أنني أريد ...

الهرمية تكوينات نظيفة الحفاظ على التنمية المختلفة والعيش الإعدادات.

أود أن تعريف "العالمية" تكوينات مرة واحدة (على سبيل المثال ، results_per_page => 20) ، تلك الموروثة ولكن تجاوز قادرة بلدي dev/live التكوينات.

Global:
  results_per_page: 20
  db_dsn: DBI:mysql;
  db_name: my_app
Dev:
  inherit_from: Global
  db_user: dev
  db_pass: dev
Dev_New_Feature_Branch:
  inherit_from: Dev
  db_name: my_app_new_feature
Live:
  inherit_from: Global
  db_user: live
  db_pass: secure

عندما نشر المشروع إلى ملقم جديد أو فرع/شوكة/نسخ مكان جديد (على سبيل المثال ، تطور جديد على سبيل المثال) ، أريد أن (مرة واحدة فقط) تعيين أي تكوين مجموعة/الملف و جميع التحديثات التلقائية.

أود أن نتصور أن هذا يمكن أن يتحقق مع الارتباط الرمزي:

git clone example.com:/var/git/my_project . # or any equiv vcs
cd my_project/etc
ln -s live.config to_use.config

ثم في المستقبل

git pull # or any equiv vcs

أود أيضا شيء أقرب إلى FindBin ، بحيث بلدي التكوينات يمكنك إما استخدام مسارات مطلقة ، أو بالنسبة إلى الانتشار الحالي.نظرا

/home/me/development/project/
  bin
  lib
  etc/config

حيث /home/me/التنمية/المشروع/etc/config يحتوي على:

tmpl_dir: templates/

عندما كود بيرل بالبحث عن tmpl_dir التكوين سوف تحصل على:

/home/me/development/project/templates/

ولكن على العيش النشر:

/var/www/project/
  bin
  lib
  etc/config

نفس رمز سحرية سوف يعود

/var/www/project/templates/

القيم المطلقة في التكوين ينبغي أن تحترم ، بحيث:

apache_config: /etc/apache2/httpd.conf

سيعود "/etc/apache2/httpd.conf" في جميع الحالات.

بدلا من FindBin نهج أسلوب بديل يمكن أن تسمح قيم التكوين أن تكون محددة من حيث التكوين الأخرى القيم ؟

tmpl_dir: $base_dir/templates

أود أيضا المهر ;)

هل كانت مفيدة؟

المحلول

محفز :: :: المساعد ConfigLoader يدعم العديد من ملفات التكوين الأساسي . إذا كان يتم استدعاء التطبيق محفز بك MyApp، ثم له ثلاثة مستويات من تجاوز: 1) MyApp.pm يمكن أن يكون التوجيه __PACKAGE__->config(...)، 2) يبدو المقبل لMyApp.yml في الدليل الرئيسي من التطبيق، 3) فإنه يبحث عن MyApp_local.yml. كل مستوى قد تتجاوز الإعدادات في كل مستوى آخر.

في التطبيق محفز لقد بنيت، أنا وضعت كل من بلدي إعدادات ثابتة في MyApp.pm، وإعدادات التصحيح بلدي في MyApp.yml، وضبط الإنتاج بلدي في MyApp_<servertype>.yml وMyApp_local.yml ثم symlinked إلى نقطة في MyApp_<servertype>.yml على كل خادم نشر (أنهم كانوا جميعا قليلا تختلف ...).

وبهذه الطريقة، كل من بلدي التكوين كان في SVN وأنا فقط بحاجة ln -s خطوة واحدة لتكوين الخادم يدويا.

نصائح أخرى

بيرل أفضل الممارسات يحذر ما تريده بالضبط.ويذكر أن التكوين الملفات يجب أن تكون بسيطة وتجنب نوع من الباروك الميزات التي تريدها.وغني عن أن يوصي ثلاث وحدات (أي التي هي جوهر بيرل): التكوين::العامة, التكوين::الأمراض المنقولة جنسيا, ، التكوين::صغيرة.

العامة العقلاني وراء ذلك هو أن تحرير ملفات التكوين يميل إلى أن يكون به غير المبرمجين أكثر تعقيدا يمكنك جعل الخاص بك ملفات التكوين ، والأرجح أنها سوف المسمار لهم.

وقال كل ذلك ، قد نلقي نظرة على YAML.فإنه يوفر كامل المواصفات الإنسان للقراءة*, شكل التسلسل.وأعتقد أن توصي حاليا محلل في بيرل YAML::XS.إذا كنت لا تذهب في هذا الطريق أقترح الكتابة أداة التكوين للمستخدمين النهائيين استخدام بدلا من جعلهم تحرير الملفات مباشرة.

ETA:على أساس لكريس دولان الجواب يبدو YAML هو الطريق للذهاب لك منذ محفز بالفعل استخدامه (.yml هو بحكم الواقع امتداد YAML الملفات).

* سمعت شكاوى المكفوفين قد يجدون صعوبة في ذلك

وYAML هو بغيض للالتكوين - انها ليست غير المبرمجين ودية ويرجع ذلك جزئيا YAML في جراب هو بالتعريف كسر لأنها على حد سواء أبيض الفضاء تعتمد بطرق مختلفة. يتناول هذا المشكلة الرئيسية مع التكوين :: العامة. لقد كتبت بعض ملفات التكوين معقدة جدا مع C :: G في الماضي وأنها تحتفظ حقا من طريقك من حيث متطلبات تركيب الخ أخرى من ذلك، وتقديم المشورة كريس يبدو على المال.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top