在Leiningen project.clj中共享配置

时间:2014-06-03 09:27:40

标签: clojure leiningen

我有一个Clojure项目,它使用lein-beanstalk Leiningen插件将我的应用部署到亚马逊Elastic Beanstalk

我的Elastic Beanstalk应用程序具有多个环境(例如开发,登台,生产等),每个环境都有不同的配置。配置由Elastic 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.fooLimit在我的环境中有所不同,所以我想使用var来保存共享conf。由于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

0 个答案:

没有答案