clojure - yogthos/config 在 CIDER 中获取我的环境,但在 lein with-profile 中运行时则不然

标签 clojure config leiningen edn

在这个简单的演示项目中,我从自己的“配置管理”开始。基本上,slurp 将 .edn 文件转换为字符串,然后edn/read-string 将其转换为 map 。它工作得很好,但后来我进行了集成测试,这需要不同的配置文件..所以我搜索并找到了这个 yogthos/config 东西,它似乎正是为此而制作的。

经过快速测试,它似乎正在做我想要的事情。在附加到 REPL 服务器的 Emacs 中进行评估,我可以评估感兴趣的配置值。

(println "HERE IT IS!!: " (:kafka-broker env))
(def p (producer (:kafka-broker env)))

当我编译文件时,它会打印带有配置值的消息。 但是,当我运行 lein with-profile dev uberjar 时,它就在那里死掉,但出现异常,

Caused by: java.lang.IllegalArgumentException: requirement failed: Missing required property 'metadata.broker.list'
    at scala.Predef$.require(Predef.scala:233)

,而我为此目的添加的 println 证实了怀疑:

HERE IT IS!!:  nil

但是..但是...我确实给了它with-profile dev..?

lein with-profile dev pprint 输出看起来正确,但我可能不知道要寻找什么:

...
 :resource-paths
 ("/Users/akarpov/repos/coras/config/dev"
  "/Users/akarpov/repos/coras/resources"),
...

最后,这是来 self 的project.clj:

...
  :profiles {:prod {:resource-paths ["config/prod"]}
             :dev  {:resource-paths ["config/dev"]}
             :uberjar {:aot :all}}
...

最佳答案

好吧,我想我找到了答案(这与我对 project.clj 的实际工作原理缺乏了解有关)

基本上,正如上面评论中所指出的,运行 uberjar 任务确实隐式地在某种内置配置文件中运行它。

所以我想好吧,让我们使用开发配置文件运行“repl”任务。然后我收到一个关于缺少 nrepl.server 的错误;它隐式地是某些内置默认配置文件的一部分(lein repl 运行良好)。将其添加为明确的内容后,它似乎有效:

  :profiles {:prod {:resource-paths ["config/prod"]
                    :plugins [[cider/cider-nrepl "0.16.0"]]}
             :dev  {:resource-paths ["config/dev"]
                    :plugins [[cider/cider-nrepl "0.16.0"]]}
             :uberjar {:aot :all}}

克服这个问题后,下一个问题是确保 yberjar 任务不会覆盖我的产品配置文件,因此需要坚持保留该值:

:profiles {:prod {:resource-paths ^:replace ["config/prod"]
                    :plugins [[cider/cider-nrepl "0.16.0"]]}

关于clojure - yogthos/config 在 CIDER 中获取我的环境,但在 lein with-profile 中运行时则不然,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48588856/

相关文章:

java - 无法在类路径上找到 Clojure 资源

clojure - 在没有源文件的情况下制作 lein uberjar

clojure - 在 repl 中获取当前 clojure 项目的版本

postgresql - 在 SQLKorma 中表达(参数化)对 Postgres 的任何(数组)查询

Clojure/ClojureScript 双函数未声明

php - Symfony 配置 : Array node or null

php - Zend 框架 : How to unset a key in Zend_Registry?

clojure - 如何美化Lisp源代码?

Clojure Luminus Migrations - 每个迁移文件只有一张表

ubuntu - Ubuntu 上 Sublime Text 2 配置文件的存储位置