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