Clojure-luminus框架如何使用mount调用mongodb connect
我开始使用Clojure-luminus框架和mongodb(和monger库)进行开发。 很难理解如何实现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
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客户端正在初始化,但我怀疑它在加载命名空间时正在进行初始化
您定义了一个连接代码>连接并将值放入atomdb
的函数。这不是使用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的代码。那些日子我没有意识到这一点。