https://github.com/yogthos/config方法允许您在project.clj中的单独文件(如下所示)中布置每个配置文件的env变量.
根据下面的内容,可以使用lein with-profile prod uberjar或lein with-profile dev repl等.
但我的问题是我无法弄清楚如何将一些共同的值放入共享区域,可由dev,stage,prod配置文件访问.
基本的例子
(defproject edn-config-test "0.1.0-SNAPSHOT"
...
:profiles {:shared {:resource-paths ["config/shared"]}
:dev {:resource-paths ["config/dev"]}
:stage {:resource-paths ["config/stage"]}
:prod {:resource-paths ["config/prod"]}}
...
(带文件)
config/shared/config.edn
config/dev/config.edn
config/stage/config.edn
config/prod/config.edn
我没试好就试过了
lein with-profile sharing,prod lein,借用复合方法
https://github.com/technomancy/leiningen/blob/stable/doc/PROFILES.md#composite-profiles
例如,当我这样做时,我只在prod配置文件中获取变量.
最佳答案 我认为这是配置的限制.我试过这个(更明确):
:profiles {:dev {:resource-paths ["config/shared" "config/dev"]}
:prod {:resource-paths [ "config/prod" "config/shared"]}}
但是,最后一个文件获胜,第一个文件被忽略.所以对于:dev共享的东西被忽略了,并且:prod prod的东西被忽略了(就像它不存在):
config/dev/config.edn => {:special-val :dev-val}
config/prod/config.edn => {:special-val :prod-val}
cat config/shared/config.edn => {:shared-val 42}
和结果:
> lein with-profile prod run
(:shared-val env) => 42
(:special-val env) => nil
> lein with-profile dev run
(:shared-val env) => nil
(:special-val env) => :dev-val
也许您想要为项目提交增强PR?
这是问题所在.它使用io / resource来读取config.edn,它隐含地期望在类路径的任何地方只有一个文件config.edn:
(defn- read-config-file [f]
(try
(when-let [url (io/resource f)]
(with-open [r (-> url io/reader PushbackReader.)]
(edn/read r))) ...
(read-config-file "config.edn")
因此,您必须远离硬编码的文件名config.edn,并制作类似config-dev.edn,config-prod.edn和config-shared.edn的内容.至少那时他们都可以住在一个./resources目录中.