Environ是一個可從許多不同來源管理環境設置的Clojure庫。它適用於遵循12個因子應用程序模式的應用程序。
當前,環境支持四個來源,按以下順序解決:
.lein-env
文件.boot-env
文件前兩個來源分別由Lein-Environ和Boot-Environ插件設置,不應手動編輯。
.lein-env
文件填充了Leiningen項目映射中的:env
密鑰的內容。 .boot-env
文件由environ.boot/environ
Boot任務填充。
在您的project.clj
中包括以下依賴項。clj文件:
:dependencies [[environ " 1.2.0 " ]]
如果您想能夠從Leiningen Project Map繪製設置,則還需要以下插件:
:plugins [[lein-environ " 1.2.0 " ]]
如果您使用的是引導工具鏈,則可能需要從構建管道讀取和編寫設置。在build.boot中,添加依賴關係:
:dependencies '[[boot-environ " 1.2.0 " ]]
然後需要環境啟動任務。
( require '[environ.boot :refer [environ]])
假設您有一個需要數據庫連接的應用程序。通常,您需要三個不同的數據庫,一個用於開發,一個用於測試,一個用於生產。
讓我們從密鑰中摘取數據庫連接詳細信息: environ.core/env
映射上的:database-url
。
( require '[environ.core :refer [env]])
( def database-url
( env :database-url ))
該鍵的值可以通過幾種不同的方式設置。開發過程中最常見的方法是在項目目錄中使用本地profiles.clj
文件。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
:clj: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.clj
中使用:profiles/dev
鍵。
在項目映射中查找帶有project
名稱空間的關鍵字。例如:
{ :env { :app-version :project/version }}
在Leiningen項目地圖中查找:version
鍵。您可以使用Lein-Pprint查看完整的項目圖。
在引導的情況下,您具有任務的全部靈活性並構建管道,這意味著以下所有內容都是有效的:
$ boot environ -e database-url=jdbc:postgresql://localhost/dev repl
( environ :env { :database-url " jdbc:postgresql://localhost/dev " })
後一種形式可以包含在自定義管道和“任務選項!”中。
該任務還會在文件集中創建或更新一個.boot-env
文件。這對於創建自己的POD(例如Boot Test)的任務很有用,而boot-test不會看到Environ Vars中的變化。
當您部署到生產環境時,您可以使用環境變量,例如:
DATABASE_URL=jdbc:postgresql://localhost/prod java -jar standalone.jar
或使用Java系統屬性:
java -Ddatabase.url=jdbc:postgresql://localhost/prod -jar standalone.jar
請注意,環境會自動降低鍵,並替換字符“ _”和“”字符。和 ”-”。因此,環境變量DATABASE_URL
和System屬性database.url
均被轉換為同一關鍵字:database-url
。
重要的是- 當從編譯的Uberjar調用時,環境不會從project.clj
拾取配置設置。因此,對於使用lein uberjar
生成的任何編譯代碼,您將需要通過Shell環境和/或系統屬性設置配置值。
版權所有©2020 James Reeves
根據Eclipse公共許可證分發,與Clojure相同。