在配置文件中正确使用 Environ 库

Correct usage of Environ library in profiles

我对配置文件和环境变量的使用有疑问。是否可以根据设置的配置文件导出带有 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(即使使用 with-profile dev)构建 WAR 文件并将其部署到 Tomcat,我将得到 db-user 作为 nil(用 (env :db-user) 调用。但是 lein ring server 正确使用 dev 配置文件,所以它可以工作。我做错了什么吗?或者 environ 不应该是是这样用的吗?

它没有按预期工作的原因是因为您仅在配置文件处于活动状态时才设置这些变量。一旦你构建了一个 WAR 文件并部署了它,lein 就不再存在了。您需要以不同的方式加载这些变量。如果你想坚持使用 environ,这两个选项似乎是 Java 系统属性或环境变量。