Clojure-luminus框架如何使用mount调用mongodb connect

Clojure-luminus框架如何使用mount调用mongodb connect,mongodb,clojure,ring,luminus,Mongodb,Clojure,Ring,Luminus,我开始使用Clojure-luminus框架和mongodb(和monger库)进行开发。 很难理解如何实现mountlibrary来启动数据库连接 我发现代码应该把handler.clj的init函数放进去 但是我不知道如何告诉mount启动数据库连接 请你帮个忙好吗 这里是我的development config.clj (ns vippro.config (:require [selmer.parser :as parser] [clojure.tool

我开始使用Clojure-luminus框架mongodb(和monger库)进行开发。 很难理解如何实现
mount
library来启动数据库连接

我发现代码应该把
handler.clj
init
函数放进去

但是我不知道如何告诉mount启动数据库连接

请你帮个忙好吗

这里是我的development 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.clj
init
函数中

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

当我设置环境变量时,mongodb数据库自动启动

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

然后我启动了环形服务器

您最初的问题是关于如何使用
挂载
来实现这一点

看起来您并不是这样做的,尽管您的mongodb客户端正在初始化,但我怀疑它在加载命名空间时正在进行初始化

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

(解除状态设置
:开始{:mongouri“mongodb://localhost/my-database"})
(defn-mongo connect)
[{:keys[mongouri]}]
(mg/通过uri mongo uri连接)
(defn-mongo断开
[{:keys[conn]:作为mongo客户端}]
(mg/断开连接)
(defstate mongo客户端
:开始(mongo连接设置)
:停止(mongo断开mongo客户端))
(defn db[](:db mongo client))
通过这样做,您可以获得
装载
的好处


然后您可以使用
environ/env
作为您的
设置
export MONGO_URI=”mongodb://...“

请说得更具体些,如果您提供了您尝试的实现,我们可能会告诉您哪里出了问题。@RicardoAcuna谢谢。我添加了我认为是relaventhanks的代码。那些日子我没有意识到这一点。