2015-10-14 52 views
6

我有一個多域Rails 4應用程序,其中http請求的request.domain確定我公開給定訪問者的哪個功能。如何在使用db.collection.insert()時即時切換MongoDB數據庫?

我的應用程序中的每個域都應該由它自己的MongoDB數據庫提供服務。例如。 domain1.comdb_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 shell命令插入文檔時,通過Mongoid觸發對該文檔的讀取,將其加載到持久層中。 –

回答

4

如果我正確理解你的問題:你有一個連接到不同的mongodbs不同服務器上的應用程序,但要使用蒙戈外殼連接到數據庫在你的應用程序之外如果屬實,你會通過shell與

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

對不起,沒有rails或Mongoid的經驗,不能在那裏提供幫助。祝你好運,聽起來像是一個有趣的挑戰。 –

相關問題