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

标签 clojure build leiningen ring environ

我有一个关于配置文件和环境变量的使用的问题。是否可以使用 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-usernil (用 (env :db-user) 调用。但是 lein ring server 正确使用 dev 配置文件,因此它可以工作。我做错了什么吗?或者 environ 不应该这样使用?

最佳答案

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

关于clojure - 在配置文件中正确使用 Environ 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40727508/

相关文章:

clojure 按键过滤映射

clojure - 程序流程 - 如果一次计算失败则停止运行

Clojure:了解剂量中的结合

去构建错误 : no non-test Go files in <dir>

clojure - clj-time.coerce java.sql.Date .toString 递减日期?

java - 在 Replacetoken ant 任务中使用 build.properties 的值

java - 在java应用程序中抽象出属性文件的硬编码路径名的可能方法

clojure - 访问 clojure webnoir 项目中的资源文件

java - leiningen - 如何为本地 jar 添加依赖项?

除非使用 Leiningen REPL,否则 Clojure jdbc create-table 语句不会运行