每个环境的Clojure数据库设置

时间:2013-04-30 10:38:07

标签: clojure

我正在使用monger从我的Clojure简单应用程序中获取并保存MongoDb中的一些数据。我有很强的Ruby on Rails背景,所以我熟悉每个环境的数据库设置(开发,测试,生产)。我希望在Clojure中有类似的东西。如何将环境添加到我的代码中?我想用Clojure方式,代码作为数据,没有任何yaml文件。如果它发生变化,我正在使用Leiningen。

3 个答案:

答案 0 :(得分:10)

您可以使用Leiningen profiles功能。

在你的project.clj中定义你的个人资料(大多数情况下你需要dev和prod)

:profiles {:dev {:resource-paths ["resource-dev"]}
           :prod {:resource-paths ["resource-prod"]}}

现在创建2个目录resource-devresource-prod并在两个目录中创建config.clj文件,这将定义存储配置的映射。类似的东西:

(ns myapp.config)
(def config {:database "dev"})

然后在您的应用代码中,您可以使用以下代码段加载配置文件(仅一次)并访问配置图:

(use 'clojure.java.io)
(def config (delay (load-file (.getFile (resource "config.clj")))))
(defn get-config []
  @(force config))

现在您可以使用get-config函数来访问配置图。

答案 1 :(得分:5)

查看我创建的示例网络应用clj-boilerplate

README中有关于如何理解开箱即用环境的信息,可以看到示例环境文件here - 但它看起来像这样:

(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")}})))

我已经发展了这种方法,但这应该让你开始。

希望这会有所帮助。

答案 2 :(得分:0)

看一下使用Confijulate(个人项目的插件!):

https://github.com/bbbates/confijulate

它允许您定义特定于环境的配置映射,并指定通过JVM系统属性使用哪个映射。