Environ เป็นไลบรารี Clojure สำหรับการจัดการการตั้งค่าสภาพแวดล้อมจากแหล่งข้อมูลต่าง ๆ มันทำงานได้ดีสำหรับแอปพลิเคชันตามรูปแบบแอพ 12 ปัจจัย
ปัจจุบัน Environ รองรับสี่แหล่งที่ได้รับการแก้ไขในลำดับต่อไปนี้:
.lein-env ในไดเรกทอรีโครงการ.boot-env บน classpathสองแหล่งแรกถูกกำหนดโดยปลั๊กอิน Lein-Environ และ Boot-Environ ตามลำดับและไม่ควรแก้ไขด้วยตนเอง
ไฟล์ .lein-env ถูกเติมด้วยเนื้อหาของ :env Key ในแผนที่ Project Leiningen ไฟล์ .boot-env ถูกเติมโดยงาน environ.boot/environ Boot
รวมการพึ่งพาต่อไปนี้ในไฟล์ project.clj ของคุณ:
:dependencies [[environ " 1.2.0 " ]]หากคุณต้องการวาดการตั้งค่าจากแผนที่โครงการ Leiningen คุณจะต้องใช้ปลั๊กอินต่อไปนี้:
:plugins [[lein-environ " 1.2.0 " ]]หากคุณใช้ Boot Toolchain คุณอาจต้องการอ่านและเขียนการตั้งค่าจาก Build Pipelines ใน build.boot เพิ่มการพึ่งพา:
:dependencies '[[boot-environ " 1.2.0 " ]]จากนั้นต้องการงานบูต Environ
( 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 ฐานข้อมูลสำหรับสภาพแวดล้อมการพัฒนาและการทดสอบ ซึ่งหมายความว่าหากคุณเรียกใช้ 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 ของคุณ clj
คำหลักที่มีเนมสเปซ project จะถูกค้นหาในแผนที่โครงการ ตัวอย่างเช่น:
{ :env { :app-version :project/version }} สิ่งนี้ค้นหาคีย์ :version ในแผนที่โครงการ Leiningen คุณสามารถดูแผนที่โครงการเต็มรูปแบบโดยใช้ Lein-Ppprint
ในกรณีของการบูตคุณมีความยืดหยุ่นอย่างเต็มที่ของงานและสร้างท่อซึ่งหมายความว่าสิ่งต่อไปนี้ถูกต้อง:
$ boot environ -e database-url=jdbc:postgresql://localhost/dev repl( environ :env { :database-url " jdbc:postgresql://localhost/dev " })แบบฟอร์มหลังสามารถรวมอยู่ในท่อที่กำหนดเองและ `ตัวเลือกงาน! '
งานยังสร้างหรืออัปเดตไฟล์ .boot-env ในชุดไฟล์ สิ่งนี้มีประโยชน์สำหรับงานที่สร้างฝักของตัวเองเช่นการทดสอบการบูตซึ่งจะไม่เห็นการเปลี่ยนแปลงในสภาพแวดล้อม
เมื่อคุณปรับใช้กับสภาพแวดล้อมการผลิตคุณสามารถใช้ประโยชน์จากตัวแปรสภาพแวดล้อมได้เช่น:
DATABASE_URL=jdbc:postgresql://localhost/prod java -jar standalone.jarหรือใช้คุณสมบัติระบบ Java:
java -Ddatabase.url=jdbc:postgresql://localhost/prod -jar standalone.jar โปรดทราบว่า Environ จะลดคีย์โดยอัตโนมัติและแทนที่อักขระ "_" และ " กับ "-". DATABASE VANVERIATION DATABASE_URL และ database.url SYSTEM PROGERTY.URL จึงถูกแปลงเป็นคำหลักเดียวกัน :database-url
สำคัญ - Environ จะไม่รับการตั้งค่าการกำหนดค่าจาก project.clj เมื่อเรียกจาก Uberjar ที่รวบรวม ดังนั้นสำหรับรหัสที่รวบรวมได้ใด ๆ ที่คุณผลิตด้วย lein uberjar คุณจะต้องตั้งค่าการกำหนดค่าของคุณผ่านสภาพแวดล้อมเชลล์และ/หรือคุณสมบัติของระบบ
ลิขสิทธิ์© 2020 James Reeves
แจกจ่ายภายใต้ใบอนุญาตสาธารณะ Eclipse เช่นเดียวกับ Clojure