在clojure中使用yogthos/config时在配置文件之间共享环境变量?
通过这种方法,您可以在在clojure中使用yogthos/config时在配置文件之间共享环境变量?,clojure,environment-variables,config,profile,Clojure,Environment Variables,Config,Profile,通过这种方法,您可以在project.clj中的单独文件(如下所示)中布局每个概要文件的环境变量 根据以下内容,可以将lein与profile prod uberjar一起使用,或者将lein与profile dev repl一起使用,等等 但我的问题是,我一直无法弄清楚如何将一些公共值放入共享的区域,该区域可由开发、阶段、产品配置文件访问 基本示例 (附文件) 我尝试了这个,但运气不好 lein与prod-lein共享配置文件,借鉴了 例如,当我这样做时,我只在prod配置文件中获取变量。我
project.clj
中的单独文件(如下所示)中布局每个概要文件的环境变量
根据以下内容,可以将lein与profile prod uberjar一起使用,或者将lein与profile dev repl一起使用,等等
但我的问题是,我一直无法弄清楚如何将一些公共值放入共享的区域,该区域可由开发、阶段、产品
配置文件访问
基本示例
(附文件)
我尝试了这个,但运气不好
lein与prod-lein共享配置文件,借鉴了
例如,当我这样做时,我只在prod
配置文件中获取变量。我认为这是config
的一个限制。我试过这个(更明确):
但是,最后一个文件获胜,第一个文件被忽略。因此,对于:dev
来说,共享内容被忽略,而对于:prod
来说,prod内容被忽略(就像它不存在一样):
结果:
> 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
:
因此,您必须摆脱硬编码的文件名config.edn
,创建类似config-dev.edn
、config-prod.edn
、和config-shared.edn
。至少到那时,他们都可以生活在一个/resources
目录中
config/shared/config.edn
config/dev/config.edn
config/stage/config.edn
config/prod/config.edn
:profiles {:dev {:resource-paths ["config/shared" "config/dev"]}
:prod {:resource-paths [ "config/prod" "config/shared"]}}
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
(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")