2015-10-14 67 views
6

У меня есть приложение с несколькими доменами Rails 4, где request.domain http-запроса определяет, какую функциональность я предоставляю данному посетителю.Как сменить базу данных MongoDB на лету при использовании db.collection.insert()?

Каждый домен в моем приложении должен обслуживать его собственная база данных MongoDB. Например. domain1.com обслуживается db_for_domain_1 и т.д.

я могу читать в MongoDB docs on runtime persistence что

Mongoid.override_database("db_for_#{request.domain}") 

позволяет мне переключаться базы данных на лету.

Но как сохранить сохранность, когда я обгоню Mongoid и использую метод mongo Shell db.collection.insert()? Я все равно сделаю это из моего приложения.

Ответ может быть в MongoDB docs on collection access, но я не понимаю. Так как же я переключаю базу данных перед/во время этой операции ?:

MyModel.collection.insert({field_1: "Value 1", field_2: "Value 2"}) 
+0

Вы используете ту же модель для баз данных? – tegon

+0

Да, да! У меня одни и те же модели. – ChristofferJoergensen

+0

О «... как сохранить постоянство ...»: ODM не может знать об операциях, выполненных вне этой структуры. Когда вы вставляете документ через команду оболочки mongo, запускайте чтение этого документа через Mongoid, чтобы загрузить его в слой persistence. –

ответ

4

Если я правильно понимаю ваш вопрос: у вас есть приложение, которое подключается к различным mongodbs на разных серверах, но хотите использовать Монго оболочку для подключения к базы данных за пределами вашей заявки? Если это правда, то вы бы подключиться к нужной базе данных через оболочку с

mongo db_for_domain_1:<port>/<dbName> 

, а затем

db.<collectionName>.insert({doc}) 

см mongo --help для имени пользователя и пароля опций.

+0

Спасибо @SteveTarver. Я очень рад, что можно переключить базу данных. Я не совсем уверен, как интерпретировать эту строку: 'mongo db_for_domain_1: /'. Является ли 'mongo' методом Ruby и' db_for_domain_1: / 'ключ, аргумент значения? В этом случае я понимаю часть значения аргумента (может быть, например, порт '27017'), но я не понимаю ключевую часть аргумента. – ChristofferJoergensen

+0

Извините, нет. Я хочу подключиться из своего приложения. Единственное, что я хочу обойти, это Mongoid (потому что я использую метод Mongo Shell). Поэтому мне нужно что-то, что работает, например. от контроллера. – ChristofferJoergensen

+0

Прошу прощения, никаких рельсов и опыта работы с Mongoid. Не могу помочь. Однако удача, кажется, интересная задача. –