Обеспечение доступа к глобальному торговому соединению со всех моделей

Будучи новичком в Clojure, Noir и Monger, я столкнулся с небольшой проблемой. Как кажется стандартным в Noir, я храню свои модели в src/app_name/model_name.clj.

Проблема, с которой я столкнулся, заключается в том, что мне нужно установить одно и то же соединение с MongoDB в каждой модели, так как я не знаю, как правильно «поделиться» соединением, например:

(ns app.models.theme
 (:require [monger.collection :as mc]
            [monger.core :as mg]))

(mg/connect!)
(mg/set-db! (mg/get-db "app_development"))

; Do stuff

Как я могу поделиться этим соединением со всем приложением? Спасибо.


person Emil Ahlbäck    schedule 31.07.2012    source источник
comment
(mg/connect!) подключение доступно в вашем приложении   -  person Ankur    schedule 31.07.2012
comment
@Ankur Да, но мне бы не хотелось снова и снова подключаться и выбирать базу данных, даже если это всего две строки кода. При выходе из развития это делает его еще более болезненным.   -  person Emil Ahlbäck    schedule 31.07.2012
comment
Зачем нужно соединение в каждой модели для начала? Вы могли бы сделать это один раз в отдельном шаге...?   -  person Rom1    schedule 31.07.2012
comment
@Rom1 Да, это то, что я хочу сделать, но, похоже, я делаю что-то не так, так как мне нужно подключиться! и установить БД! в каждой модели.   -  person Emil Ahlbäck    schedule 01.08.2012


Ответы (1)


если вы всегда подключаетесь к одному и тому же серверу, просто добавьте это в свой server.clj (src//server.clj)

(mg/connect!)

Если вы используете только одну базу данных на этом сервере, вы просто добавляете:

(mg/set-db! (mg/get-db "имя_базы"))

в тот же файл

в противном случае вы можете сделать, например, в точке входа или в любом месте кода

(defpage "/dbname/tothis" {:keys [dbname]}

  (mg/with-db (mg-get-db dbname))).....
person locojay    schedule 31.07.2012
comment
Спасибо, это то, что я думал, что сделал, но, видимо, пропустил необходимость в файле models.clj, который я использовал для установки этого соединения. Спасибо, что дали мне уверенность, что это сработало, и позволили мне найти ошибку. :) - person Emil Ahlbäck; 01.08.2012