2016-01-06 43 views
1

连接,我开始使用Clojure的Luminus公司框架MongoDB的(与商贩库)来开发。 很难理解如何实现mount库来启动数据库连接。Clojure的Luminus公司架构如何调用MongoDB的与安装

我想出代码应该放handler.cljinit函数。

但我不知道如何告诉安装启动数据库连接。

请你能帮我一下吗?

这里爱顶我的发展config.clj

(ns vippro.config 
    (:require [selmer.parser :as parser] 
      [clojure.tools.logging :as log] 
      [vippro.dev-middleware :refer [wrap-dev]] 
)) 

(def defaults 
    {:init 
    (fn [] 
    (parser/cache-off!) 
    (log/info "\n-=[vippro started successfully using the development profile]=-")) 
    :middleware wrap-dev}) 

handler.cljinit功能

(defn init 
    "init will be called once when 
    app is deployed as a servlet on 
    an app server such as Tomcat 
    put any initialization code here" 
    [] 
    (when-let [config (:log-config env)] 
    (org.apache.log4j.PropertyConfigurator/configure config)) 
    (doseq [component (:started (mount/start))] 
    (log/info component "started")) 
    ((:init defaults))) 

我的主要问题是我应该如何调用该函数从init有道

(defn connect! [] 
    ;; Tries to get the Mongo URI from the environment variable 
    (reset! db (-> (:database-url env) mg/connect-via-uri :db))) 
+0

请再具体些,如果你提供你试图实现,我们也许能够告诉你哪里出了问题。 –

+0

@RicardoAcuna谢谢。我添加了代码,我认为是相关的 – shan

回答

1

你原来的问题是关于如何使用mount做到这一点。

虽然你的mongodb客户端正在初始化,但它看起来并不像你在做什么,我怀疑它是在名字空间加载时做的。

您定义了一个connect!函数,该函数将值连接并放入原子db中。这不是用mount管理状态的正确方法,因为您正在使用自己的原子来存储状态。相反,尝试使用mount.core/defstate创建和销毁蒙戈客户端:

(defstate settings 
    :start {:mongo-uri "mongodb://localhost/my-database"}) 

(defn- mongo-connect 
    [{:keys [mongo-uri]}] 
    (mg/connect-via-uri mongo-uri)) 

(defn- mongo-disconnect 
    [{:keys [conn] :as mongo-client}] 
    (mg/disconnect conn)) 

(defstate mongo-client 
    :start (mongo-connect settings) 
    :stop (mongo-disconnect mongo-client)) 

(defn db [] (:db mongo-client)) 

通过这样做,你的mount好处。

那么你可以使用environ/env为您settingsexport MONGO_URI="mongodb://..."

+0

谢谢。那些日子我不知道这件事。 – shan

1

mongodb数据库s当我设置环境变量

export DATABASE_URL="mongodb://127.0.0.1/dbname" 

自动tarted,然后我就开始环服务器

+0

你应该接受它作为答案。 –