我有一个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
?