【问题标题】:Clojure luminus framework how to call mongodb connect with mountClojure luminus框架如何调用mongodb connect with mount
【发布时间】:2016-01-06 04:33:00
【问题描述】:

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

我发现代码应该放入 handler.cljinit 函数。

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

请你帮我一把好吗?

这里是我的开发 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)))

【问题讨论】:

  • 请更具体一些,如果您提供您尝试的实现,我们或许可以告诉您哪里出了问题。
  • @RicardoAcuna 谢谢。我添加了我认为相关的代码

标签: mongodb clojure ring luminus


【解决方案1】:

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

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

您定义了一个connect! 函数,它连接并将值放入原子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 作为你的settingsexport MONGO_URI="mongodb://..."

【讨论】:

  • 谢谢。那些日子我不知道这一点。
【解决方案2】:

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

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

然后我启动了环服务器

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-16
    • 1970-01-01
    • 1970-01-01
    • 2016-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多