2015-10-14 9 views
6

Mam aplikację z wieloma domenami Rails 4, gdzie request.domain żądania http określa, której funkcji udostępniam danemu gościowi.Jak zmienić bazę danych MongoDB w locie podczas korzystania z db.collection.insert()?

Każda domena w mojej aplikacji powinna być obsługiwana przez własną bazę danych MongoDB. Na przykład. domain1.com jest obsługiwana przez db_for_domain_1 itp

mogę przeczytać w MongoDB docs on runtime persistence że

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

pozwala mi przełączyć bazę danych w locie.

Ale jak zachować trwałość, gdy omijam Mongoida i używam metody Mongo Shell db.collection.insert()? Nadal będę to robił z poziomu mojej aplikacji.

Odpowiedź może znajdować się w MongoDB docs on collection access, ale nie rozumiem tego. Więc jak mam przełączyć bazę przed/podczas tej operacji ?:

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

Czy używasz tego samego modelu w bazach danych? – tegon

+0

Tak, mam! Ja dokładnie te same modele. – ChristofferJoergensen

+0

"... jak utrzymuję uporczywość ...": ODM nie może wiedzieć o operacjach wykonywanych poza tymi ramami. Po wstawieniu dokumentu za pomocą polecenia powłoki Mongo, uruchom odczyt tego dokumentu przez Mongoid, aby załadować go do warstwy trwałości. –

Odpowiedz

4

Jeśli dobrze rozumiem Twoje pytanie: masz aplikację, która łączy się z różnymi mongodbs na różnych serwerach, ale chcą korzystać z Mongo skorupę podłączyć do baza danych poza Twoją aplikacją? Jeśli to prawda, to po podłączeniu do wybranej bazy danych przez powłokę z

mongo db_for_domain_1:<port>/<dbName> 

a następnie

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

zobaczyć mongo --help dla opcji użytkownika i hasło.

+0

Dzięki @SteveTarver. Bardzo się cieszę, że można przełączyć bazę danych. Nie jestem do końca pewien, jak interpretować tę linię: 'mongo db_for_domain_1: /'. Czy 'mongo' jest metodą typu Ruby i' db_for_domain_1: / 'klucz, argument wartości? W takim przypadku rozumiem część wartości argumentu (może to być np. Port '27017'), ale nie rozumiem kluczowej części argumentu. – ChristofferJoergensen

+0

Och, przepraszam, nie chcę się połączyć z poziomu mojej aplikacji. Jedyne, co chcę ominąć, to Mongoid (ponieważ używam metody Mongo Shell). Potrzebuję więc czegoś, co działa np. ze sterownika. – ChristofferJoergensen

+0

Przepraszamy, brak poręczy lub doświadczenie Mongoid, nie może zaoferować pomocy. Życzę powodzenia, ale brzmi to interesująco. –

Powiązane problemy