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相同。