我正在使用monger从我的Clojure简单应用程序中获取并保存MongoDb中的一些数据.我有很强的Ruby on Rails背景,所以我熟悉每个环境的数据库设置(开发,测试,生产).我希望在Clojure中有类似的东西.如何将环境添加到我的代码中?我想用Clojure方式,代码作为数据,没有任何yaml文件.如果它发生变化,我正在使用Leiningen.
Ank*_*kur 10
您可以使用Leiningen 配置文件功能.
在你的project.clj中定义你的配置文件(大多数情况下你需要dev和prod)
:profiles {:dev {:resource-paths ["resource-dev"]}
:prod {:resource-paths ["resource-prod"]}}
Run Code Online (Sandbox Code Playgroud)
现在创建2个目录resource-dev,resource-prod并在两个目录中创建config.clj文件,这将定义存储配置的映射.就像是:
(ns myapp.config)
(def config {:database "dev"})
Run Code Online (Sandbox Code Playgroud)
然后在您的应用程序代码中,您可以使用下面的代码片段加载配置文件(仅一次)并访问配置映射:
(use 'clojure.java.io)
(def config (delay (load-file (.getFile (resource "config.clj")))))
(defn get-config []
@(force config))
Run Code Online (Sandbox Code Playgroud)
现在您可以使用get-config函数来访问配置图.
看一下我创建的示例Web应用程序clj-boilerplate.
README中有关于它如何理解开箱即用环境的信息,这里可以看到一个示例环境文件- 但它看起来像这样:
(def config
(let [env (or (System/getenv "ENVIRONMENT") "development")]
((keyword env)
{:development
{:database-url "postgres://lborges:@localhost/clj-boilerplate"}
:test
{:database-url "postgres://lborges:@localhost/clj-boilerplate-test"
:production
{:database-url (System/getenv "DATABASE_URL")}})))
Run Code Online (Sandbox Code Playgroud)
我已经进化了这种方法,但这应该让你开始.
希望这可以帮助.