yogthos / config在CIDER中获取我的环境,但在lein with-profile

时间:2018-02-02 18:32:06

标签: clojure config leiningen edn

在这个简单的演示项目上工作,我开始使用自己的“配置管理”。基本上,啜饮将.edn文件转换为字符串,然后将 edn / read-string 转换为地图。它工作正常,但后来我进行了集成测试,并调用了不同的配置文件..所以我搜索并找到了这个yogthos / config的东西,这似乎完全是为了这个。

快速测试,似乎正在做我想要的。在连接到REPL服务器的Emacs中进行评估,我可以评估感兴趣的配置值。

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

当我编译文件时,它会打印带有配置值的消息。 但是,当我使用-profile dev uberjar 运行 lein时,它会在那里因异常而死亡,

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 output 看起来是对的,但我可能不知道该找什么:

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

最后,这是来自我的project.clj:

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

1 个答案:

答案 0 :(得分:1)

好吧我觉得我找到了答案(这与我对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任务不会覆盖我的prod配置文件,因此需要坚持要保留该值:

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