在我的Leiningen项目.clj文件中,我使用 environ在不同的配置文件中设置环境变量。我想要使用lein-ring构建一个演示uberjar,该演示版本使用某些环境变量的不同值来替换生产版本。然而,出于某种原因,我似乎无法获取它们。
我在项目.clj文件中定义了一个名为
我可以访问两者的值。
为什么会这样?这真的不是我所期望的。看起来uberjar总是使用生产配置创建。或者还有其他问题吗? lein-ring页面确实说明了以下内容:
Lein-Ring关注多个环境变量,包括: PORT - Web服务器用于HTTP的端口SSLPORT - Web服务器用于HTTPS的端口
这些将覆盖在project.clj文件中指定的任何选项,但不会覆盖在命令行上指定的任何选项。
然而,这并不清楚是否意味着project.clj中指定的任何其他环境变量都将被忽略。
在Windows上运行leiningen 2.3.4。
我在项目.clj文件中定义了一个名为
demo
的配置文件,类似于以下内容::demo {:dependencies [[javax.servlet/servlet-api "2.5"]]
:plugins [[lein-environ "0.4.0"]]
:env {:foo "FOO" :bar "BAR"}}
然后我执行
lein with-profile demo ring uberjar
但是在生成的独立jar包中,使用environ.core/env
访问foo或bar会返回nil
。另一方面,如果我运行
lein with-profile demo ring server-headless
我可以访问两者的值。
为什么会这样?这真的不是我所期望的。看起来uberjar总是使用生产配置创建。或者还有其他问题吗? lein-ring页面确实说明了以下内容:
Lein-Ring关注多个环境变量,包括: PORT - Web服务器用于HTTP的端口SSLPORT - Web服务器用于HTTPS的端口
这些将覆盖在project.clj文件中指定的任何选项,但不会覆盖在命令行上指定的任何选项。
然而,这并不清楚是否意味着project.clj中指定的任何其他环境变量都将被忽略。
在Windows上运行leiningen 2.3.4。
System/getenv
检查环境变量的代码都不会受到在lein-environ
中设置的属性的影响。 - Alexenviron.core
完全适用于生产环境。但是,你不应该期望通过lein-environ
设置的属性在项目代码中可见,除非它作为 Leiningen 任务执行时。 - Alex