2015-10-14 4 views
6

httpリクエストのrequest.domainが特定の訪問者を公開する機能を決定する、マルチドメインのRails 4アプリケーションがあります。db.collection.insert()の使用中にMongoDBデータベースを即座に切り替えるにはどうすればいいですか?

私のアプリの各ドメインは、独自のMongoDBデータベースによって提供される必要があります。例えば。 domain1.comは、db_for_domain_1によって提供されるなど

私は

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

は私がその場でデータベースを切り替えることができますMongoDB docs on runtime persistenceことで読むことができます。

しかし、モンゴイドをバイパスしてmongoシェルメソッド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を介してそのドキュメントの読み込みをトリガして、それを永続レイヤにロードします。 –

答えて

4

:あなたは、異なるサーバー上の異なるmongodbsに接続するアプリを持っているが、それに接続するためのmongoシェルを使用したいですアプリケーションの外部にあるデータベース? trueの場合、あなたは

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

申し訳ありません、いいえ私のアプリケーション内から接続したいです。私が迂回したいのは、モンゴイドだけです(モンゴルのシェルメソッドを使用しているためです)。だから、私は何かが必要なものが必要です。コントローラから。 – ChristofferJoergensen

+0

申し訳ありませんが、レールやモンゴイドの経験はありません、そこに助けを提供することはできません。幸運にも、興味深い挑戦のように聞こえます。 –

関連する問題