Environ هي مكتبة Clojure لإدارة إعدادات البيئة من عدد من المصادر المختلفة. إنه يعمل بشكل جيد للتطبيقات التي تتبع نمط تطبيق العامل 12.
حاليًا ، تدعم Environ أربعة مصادر ، تم حلها بالترتيب التالي:
.lein-env في دليل المشروع.boot-env على classpathيتم تعيين المصدرين الأولين بواسطة المكونات الإضافية Lein-Environ و Boot-Environ على التوالي ، ولا ينبغي تحريرها يدويًا.
يتم ملء ملف .lein-env بمحتوى مفتاح :env في خريطة مشروع Lininingen. يتم ملء ملف .boot-env بواسطة مهمة environ.boot/environ Boot.
قم بتضمين التبعية التالية في ملف project.clj :
:dependencies [[environ " 1.2.0 " ]]إذا كنت تريد أن تكون قادرًا على رسم إعدادات من خريطة مشروع Lininingen ، فستحتاج أيضًا إلى المكون الإضافي التالي:
:plugins [[lein-environ " 1.2.0 " ]]إذا كنت تستخدم مجموعة أدوات التمهيد ، فقد ترغب في قراءة الإعدادات وكتابةها من خطوط الأنابيب. في build.boot ، أضف التبعية:
:dependencies '[[boot-environ " 1.2.0 " ]]ثم تتطلب مهمة التمهيد البيئة.
( require '[environ.boot :refer [environ]])دعنا نقول أن لديك تطبيق يتطلب اتصال قاعدة البيانات. غالبًا ما تحتاج إلى ثلاث قواعد بيانات مختلفة ، واحدة للتطوير ، واحدة للاختبار ، وواحدة للإنتاج.
يتيح سحب تفاصيل اتصال قاعدة البيانات من المفتاح :database-url على خريطة environ.core/env .
( require '[environ.core :refer [env]])
( def database-url
( env :database-url )) يمكن تعيين قيمة هذا المفتاح بعدة طرق مختلفة. الطريقة الأكثر شيوعًا أثناء التطوير هي استخدام ملف profiles.clj محلي في دليل المشروع الخاص بك. يحتوي هذا الملف على خريطة تحتوي على ملفات تعريف سيتم دمجها مع الملفات الشخصية المحددة في project.clj ، ولكن يمكن حفظها خارج نطاق التحكم في الإصدار ومحفوظة لخيارات التطوير المحلية.
{ :dev { :env { :database-url " jdbc:postgresql://localhost/dev " }}
:test { :env { :database-url " jdbc:postgresql://localhost/test " }}} في هذه الحالة ، نضيف عنوان URL لقاعدة البيانات لبيئات DEV واختبار. هذا يعني أنه إذا قمت بتشغيل lein repl ، فسيتم استخدام قاعدة بيانات DEV ، وإذا قمت بتشغيل lein test ، فسيتم استخدام قاعدة بيانات الاختبار.
بحيث يتم دمج ملفات التعريف التي تحددها في profiles.clj project.clj project.clj
:profiles { :dev [ :project/dev :profiles/dev ]
:test [ :project/test :profiles/test ]
; ; only edit :profiles/* in profiles.clj
:profiles/dev {}
:profiles/test {}
:project/dev { :source-paths [ " src " " tool-src " ]
:dependencies [[midje " 1.6.3 " ]]
:plugins [[lein-auto " 0.1.3 " ]]}
:project/test {}} ثم استخدم :profiles/dev في profiles.clj الخاصة بك.
يتم البحث عن الكلمات الرئيسية مع مساحة اسم project في خريطة المشروع. على سبيل المثال:
{ :env { :app-version :project/version }} هذا يبحث عن مفتاح :version في خريطة مشروع لينينين. يمكنك عرض خريطة المشروع الكاملة باستخدام Lein-Ppprint.
في حالة التمهيد ، لديك المرونة الكاملة للمهام وبناء خطوط الأنابيب ، مما يعني أن كل ما يلي صالح:
$ boot environ -e database-url=jdbc:postgresql://localhost/dev repl( environ :env { :database-url " jdbc:postgresql://localhost/dev " })يمكن تضمين النموذج الأخير في خطوط الأنابيب المخصصة و "خيارات المهام!".
تقوم المهمة أيضًا بإنشاء أو تحديث ملف .boot-env في ملف الملفات. يعد هذا مفيدًا للمهام التي تنشئ قرونها الخاصة مثل اختبار التمهيد ، والتي لن ترى تغييرات في Environ Vars.
عندما تنشر في بيئة الإنتاج ، يمكنك الاستفادة من متغيرات البيئة ، مثل ذلك:
DATABASE_URL=jdbc:postgresql://localhost/prod java -jar standalone.jarأو استخدم خصائص نظام Java:
java -Ddatabase.url=jdbc:postgresql://localhost/prod -jar standalone.jar لاحظ أن Environ يقلل تلقائيًا من المفاتيح ، ويحل محل الأحرف "_" و "." مع "-". وبالتالي يتم تحويل DATABASE_URL للبيئة database.url خاصية النظام :database-url
مهم - لن تلتقط Environ إعدادات التكوين من project.clj عند استدعاء من Uberjar المترجمة. لذلك بالنسبة لأي رمز مجمع تقوم به مع lein uberjar ، ستحتاج إلى تعيين قيم التكوين الخاصة بك عبر بيئة Shell و/أو خصائص النظام.
حقوق الطبع والنشر © 2020 جيمس ريفز
تم توزيعه تحت رخصة Eclipse العامة ، مثل Clojure.