Clojure Leiningen project.clj中的共享配置

Clojure Leiningen project.clj中的共享配置,clojure,leiningen,Clojure,Leiningen,我有一个Clojure项目,它使用Leiningen插件将我的应用程序部署到Amazon 我的Elastic Beanstalk应用程序有多个环境(例如开发、登台、生产等),每个环境都有不同的配置。配置由弹性Beanstalk环境属性管理,这些属性在JVM中设置为系统属性。lein beanstalk使用project.clj中的以下条目管理这些属性: (defproject eb-app "1.0-SNAPSHOT" :aws {:beanstalk {:environments [{:n

我有一个Clojure项目,它使用Leiningen插件将我的应用程序部署到Amazon

我的Elastic Beanstalk应用程序有多个环境(例如开发、登台、生产等),每个环境都有不同的配置。配置由弹性Beanstalk环境属性管理,这些属性在JVM中设置为系统属性。lein beanstalk使用
project.clj
中的以下条目管理这些属性:

(defproject eb-app "1.0-SNAPSHOT"
  :aws {:beanstalk {:environments [{:name "staging"
                                    :env {"com.example.fooLimit" "3"
                                          "com.example.barName" "BAR"}}
                                   {:name "production"
                                    :env {"com.example.fooLimit" "27"
                                          "com.example.barName" "BAR"}}]}})
在本例中,只有
com.example.duffimit
在我的环境中有所不同,因此我希望使用一个var来保存共享配置。由于
defproject
是一个引用所有内容的宏,我可以通过语法unquote实现我想要的:

(def cfg {"com.example.barName" "BAR"})

(defproject eb-app "1.0-SNAPSHOT"
  :aws {:environments [{:name "staging"
                        :env ~(merge cfg {"com.example.fooLimit" "3"}})
                       {:name "production"
                        :env ~(merge cfg {"com.example.fooLimit" "27"}})}]}})

我的问题是,这在Clojure项目中是否很常见,或者(在Clojure程序员中)是否有一种更为惯用或行业标准的方式来干涸
project.clj

我以前没有看到过,但这是一个好主意。。。只需查看config.cfg文件在Leiningen中的管理位置,以确保创建全局定义不会产生任何副作用。