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.