Clojure Leiningen project.clj中的共享配置
我有一个Clojure项目,它使用Leiningen插件将我的应用程序部署到Amazon 我的Elastic Beanstalk应用程序有多个环境(例如开发、登台、生产等),每个环境都有不同的配置。配置由弹性Beanstalk环境属性管理,这些属性在JVM中设置为系统属性。lein beanstalk使用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
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中的管理位置,以确保创建全局定义不会产生任何副作用。