我开始使用Clojure luminus框架和mongodb (带有monger库)进行开发。很难理解如何实现mount库来启动db连接。
我认为代码应该放置handler.clj的init函数。
但我不知道如何告诉挂载启动数据库连接。
能帮我一下吗?
这里是我的开发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)))发布于 2018-01-14 01:03:55
您最初的问题是如何使用mount来做到这一点。
看起来并不是这样,虽然mongodb客户机正在初始化,但我怀疑它是在加载命名空间时执行的。
您定义了一个connect!函数,它连接原子db并将其放入原子db中。这不是使用mount管理状态的正确方法,因为您正在使用自己的原子来存储状态。相反,尝试使用mount.core/defstate创建和销毁mongo客户端:
(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作为您的settings和export MONGO_URI="mongodb://..."
发布于 2016-01-06 05:34:32
设置环境变量时,mongodb数据库将自动启动。
export DATABASE_URL="mongodb://127.0.0.1/dbname"然后我启动了戒指服务器
https://stackoverflow.com/questions/34625685
复制相似问题