在已部署的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设置似乎不包含在编译文件中。然而,我不希望数据库连接存储在编译文件中,而是驻留在生产服务器上的配置文件中。
最理想的是,无论应用程序是在开发模式还是生产模式下运行,都应以相同的方式存储和检索本地配置。但是我无法弄清楚如何去做。
答案 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中的配置启动已编译的应用程序。