我正在使用 monger 从我的 Clojure 简单应用程序中获取和保存 MongoDb 中的一些数据。我有很强的 Ruby on Rails 背景,所以我熟悉每个环境(开发、测试、生产)的数据库设置。我想在 Clojure 中有类似的东西。如何将环境添加到我的代码中?我想用 Clojure 方式来做,代码作为数据,没有任何 yaml 文件。如果它改变了一些东西,我正在使用 Leiningen。
问问题
2420 次
3 回答
11
您可以使用 Leiningen配置文件功能。
在你的 project.clj 中定义你的配置文件(大多数情况下你需要 dev 和 prod)
:profiles {:dev {:resource-paths ["resource-dev"]}
:prod {:resource-paths ["resource-prod"]}}
现在创建 2 个目录resource-dev
并resource-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 回答