6

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

4

3 回答 3

11

您可以使用 Leiningen配置文件功能。

在你的 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函数来访问配置映射。

于 2013-04-30T11:38:55.850 回答
5

查看clj-boilerplate,这是我创建的示例 Web 应用程序。

自述文件中有关于它如何理解开箱即用环境的信息,并且可以在此处看到示例环境文件- 但它看起来像这样:

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

从那以后,我已经发展了这种方法,但这应该可以帮助您入门。

希望这可以帮助。

于 2013-04-30T11:04:52.550 回答
0

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

https://github.com/bbbates/confijulate

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

于 2013-12-30T01:08:35.730 回答