部署的Clojure应用程序中的本地配置

时间:2017-04-04 15:32:37

标签: deployment clojure configuration

在已部署的Clojure Luminus应用程序中存储和检索配置设置的惯用方法是什么?

在我的应用程序基础上的Luminus模板中,val processFlying: PF = { // doSomething, like declare a sub-function f { case (b: Bird, n, loc) => f(b) case (b: Bat, n, loc) => f(b) } } 文件用于存储数据库连接字符串。但是,当我使用profiles.clj编译应用程序时,profiles.clj设置似乎不包含在编译文件中。然而,我不希望数据库连接存储在编译文件中,而是驻留在生产服务器上的配置文件中。

最理想的是,无论应用程序是在开发模式还是生产模式下运行,都应以相同的方式存储和检索本地配置。但是我无法弄清楚如何去做。

2 个答案:

答案 0 :(得分:1)

您可能有兴趣使用the environ library。从他们的自述文件:

假设您有一个需要数据库连接的应用程序。通常,您需要三个不同的数据库,一个用于开发,一个用于测试,一个用于生产。

让我们从environ.core / env地图上的密钥:database-url中提取数据库连接详细信息。

(require '[environ.core :refer [env]])

(def database-url
  (env :database-url))

此键的值可以通过几种不同的方式设置。开发过程中最常用的方法是在项目目录中使用本地profiles.clj文件。此文件包含一个与标准project.clj文件合并的映射,但可以保留在版本控制之外,并保留用于本地开发选项。

{:dev  {:env {:database-url "jdbc:postgresql://localhost/dev"}}
 :test {:env {:database-url "jdbc:postgresql://localhost/test"}}}

答案 1 :(得分:0)

http://www.luminusweb.net/docs/environment.md#edn_based_configuration页帮助了我。 java -Dconf=config.edn -jar app.jar将使用存储在config.edn中的配置启动已编译的应用程序。