我正在使用monger从我的Clojure简单应用程序中获取并保存MongoDb中的一些数据。我有很强的Ruby on Rails背景,所以我熟悉每个环境的数据库设置(开发,测试,生产)。我希望在Clojure中有类似的东西。如何将环境添加到我的代码中?我想用Clojure方式,代码作为数据,没有任何yaml文件。如果它发生变化,我正在使用Leiningen。
答案 0 :(得分:10)
您可以使用Leiningen profiles功能。
在你的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
函数来访问配置图。
答案 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系统属性使用哪个映射。