我有一个关于配置文件和环境变量的使用的问题。是否可以使用 environ
导出变量取决于设置的配置文件?这是我尝试过的(部分project.clj
)
:env {:time-to-wait-for-response "72" ; in hours
:crm-address "https://app.onepagecrm.com/api/v3/"}
:profiles
{:uberjar {:omit-source true
:aot :all}
:uberwar {:omit-source true
:aot :all}
:prod {:ring {:open-browser? false
:stacktraces? false
:auto-reload? false}
{:env {:prod? true
:db-user "mailer"
:db-password "" }}
:dev {:env {:db-user "mailer"
:db-password ""}
:dependencies [[ring-mock "0.1.5"]
[ring/ring-devel "1.3.1"]
[midje "1.6.3"]]
:ring {:open-browser? false}
:plugins [[lein-midje "3.2.1"]]}})
但是,如果我使用 lein ring uberwar
构建 WAR 文件(即使使用 with-profile dev
)并将其部署到 Tomcat 我将得到 db-user
如nil
(用 (env :db-user)
调用。但是 lein ring server
正确使用 dev
配置文件,因此它可以工作。我做错了什么吗?或者 environ
不应该这样使用?
最佳答案
它无法按您预期工作的原因是您仅在配置文件处于事件状态时设置这些变量。一旦您构建了 WAR 文件并部署了它,lein 就不再出现在画面中。您需要以不同的方式加载这些变量。如果您想坚持使用环境,这两个选项似乎是 Java 系统属性或环境变量。
关于clojure - 在配置文件中正确使用 Environ 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40727508/