首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何调用mongodb与挂载的连接

如何调用mongodb与挂载的连接
EN

Stack Overflow用户
提问于 2016-01-06 04:33:00
回答 2查看 413关注 0票数 1

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

我认为代码应该放置handler.cljinit函数。

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

能帮我一下吗?

这里是我的开发config.clj

代码语言:javascript
复制
    (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函数中

代码语言:javascript
复制
(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适当的方式调用这个函数

代码语言:javascript
复制
(defn connect! []
  ;; Tries to get the Mongo URI from the environment variable
  (reset! db (-> (:database-url env) mg/connect-via-uri :db)))
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-01-14 01:03:55

您最初的问题是如何使用mount来做到这一点。

看起来并不是这样,虽然mongodb客户机正在初始化,但我怀疑它是在加载命名空间时执行的。

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

代码语言:javascript
复制
(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://..."

票数 1
EN

Stack Overflow用户

发布于 2016-01-06 05:34:32

设置环境变量时,mongodb数据库将自动启动。

代码语言:javascript
复制
export DATABASE_URL="mongodb://127.0.0.1/dbname"

然后我启动了戒指服务器

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34625685

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档