Meteorプロジェクトで既存のMongoDBを使用するにはどうすればよいですか?


84

しばらくの間、GUIクライアント用に(wxPythonによって)実行中のMongoDBサーバーがあるとしましょう。

新しいMeteorプロジェクトを既存のMongoDBに接続するにはどうすればよいですか?


Dror(stackoverflow.com/users/460278/dror)の正解は次のとおりです。stackoverflow.com
Mike Graf

コメントありがとうございます。@Drorのソリューションはハックではなく公式なものであることは知っていますが、以前に回答を割り当てました。「答え」を変更/更新することが適切で許容可能な動作であるかどうかはよくわかりません。
ドレイクガン

「いつでも、どの回答を受け入れるか、または単に受け入れないかを変更できます。」meta.stackexchange.com/a/5235/191226
Mike Graf

1
これを指摘してくれてありがとう。今はもっと自信があります。
ドレイクガン

回答:


156

環境変数MONGO_URLを使用します。何かのようなもの:

export MONGO_URL=mongodb://localhost:27017/your_db

使用したいdbyour_dbと交換してmeteorください。


4
私は立ち往生しています。your_dbを「meteor」に置き換える方法を説明できますか
Surjith SM

3
ノートこれは流星に配備する場合はprodに動作しないこと-を参照してstackoverflow.com/questions/21971036/...
maxko87

2
@SurjithSMexport MONGO_URL=mongodb://localhost:27017/my_database_nameは、という名前のデータベースにデータを配置しますmy_database_name。彼はあなたが望むならあなたができることを意味しましたexport MONGO_URL=mongodb://localhost:27017/meteor。データベース名をプロジェクトと同じ名前にすることをお勧めします。
Benjamin Crouzier 2014

1
いくつかの構成ファイルでそれを行うことができますか?settings.jsonで試してみましたが、機能しません
Kostanos 2015

1
これは私のローカルアプリから一体をクラッシュさせました。
デボラ2016年

14

私たちは使用しますnpm

  • まだ持っていない場合は、をpackage.json使用してファイルを作成しますnpm init

  • そのファイルに次の行を入力して変更します(すべての<...>'を置き換えます)。

"scripts": {"meteor": "MONGO_URL=mongodb://<USER>:<PASSWORD>@<SERVER>:<PORT>/<DB> meteor"}
  • その後、あなたはただで流星を始めることができますnpm run meteor

'MONGO_URL'は内部コマンドまたは外部コマンドとして認識されません
Abdul Hameed

1
これは環境変数です。=記号の前後にスペースがないことを確認してください
malix 2016年

9

ではトムWijsmanは推奨していますダニーの答えにコメントパッケージ/モンゴ-livedata / mongo_driver.jsにパッチを適用、ライン21 Aより良い場所に存在する場合、環境変数がまだピックアップされ、この方法でライン460、アプリ/流星/ run.jsであります、HerokuでMeteorを実行する場合など。デフォルトのハードコードされたmongodb://127.0.0.1をMongoDBサーバーの場所に変更するだけです。


4

db.copyDatabaseを使用してこれを行うことができますが、バグがあり、Meteorのデータを更新できないという警告があります。https://github.com/meteor/meteor/issues/61を参照してください

Meteorの開発バージョンを使用している場合は、Meteorアプリを起動してから、実行中のMongoDBサーバーからデータを転送できます。

mongo --port 3002

これにより、MeteorアプリのMongoサーバーに接続されます。次に、db.copyDatabaseを次のように使用します。

db.copyDatabase('myappDatabase', 'meteor', 'localhost');

これにより、データベースmyappDatabaseがローカルホストの標準ポートで実行されているMongoDBサーバーからMeteorアプリのMongoサーバーにコピーされます。Meteorアプリが使用するデータベース名は「meteor」です。


2

データをMeteorMongoDBデータベースにコピーするだけです。Meteorを既存のデータベースに接続しようとして、上書きするリスクはありません。

使用しmongoexport、その後、個別にあなたのコレクションをダンプするmongoimportという名前のデータベースにファイルをインポートするためにmeteor流星のMongoDBインスタンスに。Meteor MongoDBインスタンスは、bind_address 127.0.0.1のポート3002で実行され、データファイルはMeteorプロジェクトサブディレクトリにあり.meteor/local/dbます。

MongoDBでのインポート/エクスポートに慣れていない場合は、ドキュメントを参照してください。


それは、他の手段でホスティングするのではなく、mongodbホスティングを流星に提供する必要があることを意味しますか?
ドレイクガン

2
@Drake:データベースで動作するようにMeteorを調整できない限り。app/lib/mongo_runner.jsそれを起動する方法を決定します(コードを起動する必要さえないかもしれないので、それを無効にする方法を調べてください)。それへの接続は内部packages/mongo-livedata/mongo_driver.jsで発生しているようです。21行目のurlパラメータを変更するだけでよいと思います。その値を知りたい場合は、そのconsole.log(url);前の行に挿入し、Meteorを再起動して、Meteorの出力を注意深く観察してください。あなたは確かに...トリガーにそれのためにアプリに一度流星を呼ぶのです作る
タマラWijsman

@ドレイク:私のコメントを答えとして入れてほしい場合(それがあなたのために働いた場合)、私に知らせてください。
Tamara Wijsman 2012年

@TomWijsman:試しconsole.log(url);て情報を入手しました!私はまだ、私はそれがコミュニティに支援を提供し、あるいは少なくとも信じている原因あなたは仕事の周りの答えとして完全としてこれを作るために〜流星に慣れていない私のような人々を提案します
ドレイク関

エクスポート/インポートコマンドよりも、mongochefを使用してデータをコピーして貼り付ける方がはるかに簡単です。3t.io/mongochef
Max Hodges

0

私がしたのは、ローカルホストの代わりにデジタル海洋液滴サーバーのIPを追加することだけで、それは機能しました:

env: {
      ROOT_URL: 'http://yourdomain.com',
      MONGO_URL: 'mongodb://104.236.24.66:27017/meteor',
      PORT: 3002,
    },

編集:MUPを使用してmeteorプロジェクトをデプロイします:https//github.com/zodern/meteor-up

env: {
      ROOT_URL: 'https://www.example.com',
      MONGO_URL: 'mongodb://localhost/meteor',
    },

MupはDockerを使用し、2つのコンテナーを「リンク」するため、アプリとmongoの両方を同じVM(サーバー)でホストします。セキュリティ上の理由から、mongoDBにパブリックIPからアクセスできないようにする必要があります。


これをどこに追加しましたか?
GauravArya18年

VMのパブリックIPをmongoDBに使用することは実際には悪い習慣です。ローカルホストを使用するように回答を更新します。
ミレーヌ2018年

0

多くの時間を費やし、URLを引用符で囲む必要があることがわかりました。

export MONGO_URL='mongodb://localhost/meteor'
export MONGO_OPLOG_URL='op log url'

-6

アプリを1つのターミナルウィンドウで実行し続けてから、別のウィンドウを開いて「meteor mongo」と入力すると、機能するはずです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.