每个环境的Clojure数据库设置

Seb*_*ian 6 clojure

我正在使用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函数来访问配置图.

  • 您使用特定的配置文件运行应用程序:`lein with-profile dev run` (3认同)
  • John Doe - 您可以通过Procfile使用Heroku和`lein with-profile`,例如`web:lein with-profile production trampoline run -m horus.core` (2认同)

leo*_*ges 5

看一下我创建的示例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)

我已经进化了这种方法,但这应该让你开始.

希望这可以帮助.