Wie verwende ich eine vorhandene MongoDB in einem Meteor-Projekt?


84

Angenommen, es gibt einen laufenden MongoDB-Server für einen GUI-Client (von wxPython ) für eine Weile.

Wie kann ich mein neues Meteor-Projekt mit meiner bereits vorhandenen MongoDB verbinden ?



Danke für den Kommentar. Ich weiß, dass die Lösung von @ Dror viel offizieller ist als ein Hack, aber ich habe bereits zuvor eine Antwort vergeben. Ich bin mir nicht ganz sicher, ob es ein gutes und zulässiges Verhalten ist, "Antwort" dann zu ändern / zu aktualisieren?
Drake Guan

"Sie können jederzeit ändern, welche Antwort akzeptiert wird, oder die Antwort einfach nicht akzeptieren." meta.stackexchange.com/a/5235/191226
Mike Graf

1
Vielen Dank, dass Sie mich darauf hingewiesen haben. Ich bin jetzt zuversichtlicher.
Drake Guan

Antworten:


156

Verwenden Sie die Umgebungsvariable MONGO_URL. Etwas wie:

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

Ersetzen Sie your_dbdurch meteoroder eine andere Datenbank, die Sie verwenden möchten.


4
Ich stecke fest. Können Sie erklären, wie Sie Ihre_db durch "Meteor" ersetzen können
Surjith SM

3
Beachten Sie, dass dies bei der Bereitstellung auf Meteor NICHT für Produkte
funktioniert

2
@SurjithSM speichert export MONGO_URL=mongodb://localhost:27017/my_database_nameDaten in einer Datenbank mit dem Namen my_database_name. Er meinte, wenn du willst, kannst du es tun export MONGO_URL=mongodb://localhost:27017/meteor. Ich dachte, ich würde empfehlen, Ihren Datenbanknamen genauso zu benennen wie Ihr Projekt.
Benjamin Crouzier

1
Kann es mit einer Konfigurationsdatei gemacht werden? Versucht mit settings.json und es wird nicht funktionieren
Kostanos

1
Dies stürzte zum Teufel aus meiner lokalen App.
Deborah

14

Wir verwenden npm:

  • Erstellen Sie eine package.jsonDatei mit npm init, falls Sie noch keine haben.

  • Geben Sie die folgende Zeile in diese Datei ein und ändern Sie sie (wobei alle ersetzt werden <...>):

"scripts": {"meteor": "MONGO_URL=mongodb://<USER>:<PASSWORD>@<SERVER>:<PORT>/<DB> meteor"}
  • Sie können dann Meteor mit nur startennpm run meteor

'MONGO_URL' wird nicht als interner oder externer Befehl erkannt
Abdul Hameed

1
Es ist eine Umgebungsvariable, stellen Sie sicher, dass keine Leerzeichen um das = Zeichen
Malix

9

In den Kommentaren zu Dannys Antwort empfiehlt Tom Wijsman, die Pakete / mongo-livingata / mongo_driver.js, Zeile 21, zu patchen. Ein besserer Ort ist in app / meteor / run.js, Zeile 460. Auf diese Weise wird die Umgebungsvariable weiterhin erfasst, falls vorhanden , zum Beispiel beim Ausführen von Meteor auf Heroku. Ändern Sie einfach die standardmäßige fest codierte Mongodb: //127.0.0.1 in den Speicherort Ihres MongoDB-Servers.


4

Sie können dazu db.copyDatabase verwenden, mit der Einschränkung, dass ein Fehler vorliegt und Sie die Daten in Meteor nicht aktualisieren können. Siehe https://github.com/meteor/meteor/issues/61

Wenn Sie die Entwicklungsversion von Meteor verwenden, können Sie Daten von einem laufenden MongoDB-Server übertragen, indem Sie Ihre Meteor-App starten und dann Folgendes tun:

mongo --port 3002

Dadurch werden Sie mit dem Mongo-Server der Meteor-App verbunden. Verwenden Sie nun db.copyDatabase wie folgt:

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

Dadurch wird die Datenbank myappDatabase von einem MongoDB-Server, der auf dem Standardport auf localhost ausgeführt wird, auf den Mongo-Server der Meteor-App kopiert. Der von der Meteor-App verwendete Datenbankname lautet "Meteor".


2

Kopieren Sie einfach die Daten in die Meteor MongoDB-Datenbank - kein Grund, Meteor an die vorhandene Datenbank anzuschließen und zu riskieren, Dinge zu überschreiben.

Verwenden Sie mongoexportdiese Option, um Ihre Sammlungen einzeln zu sichern und anschließend mongoimportdie Dateien in die meteorin der Meteor MongoDB-Instanz angegebene Datenbank zu importieren . Die Meteor MongoDB-Instanz wird auf Port 3002 mit der Bindungsadresse 127.0.0.1 ausgeführt, und die Datendateien befinden sich im Unterverzeichnis des Meteor-Projekts .meteor/local/db.

Lesen Sie die Dokumentation, wenn Sie mit dem Import / Export in MongoDB nicht vertraut sind.


Bedeutet das, dass wir Meteor Mongodb-Hosting liefern sollten, anstatt auf andere Weise zu hosten?
Drake Guan

2
@Drake: Es sei denn, Sie können Meteor so anpassen, dass es mit Ihrer Datenbank funktioniert. app/lib/mongo_runner.jsentscheidet, wie es gestartet werden soll (möglicherweise müssen Sie nicht einmal Code starten, prüfen Sie daher, wie Sie es deaktivieren können). Die Verbindung dazu scheint im Inneren zu erfolgen packages/mongo-livedata/mongo_driver.js. Ich denke, Sie können einfach den URL-Parameter in Zeile 21 ändern. Wenn Sie seinen Wert wissen möchten, fügen Sie ihn console.log(url);in die Zeile ein, starten Sie Meteor neu und beobachten Sie Ihre Meteor-Ausgabe genau. Stellen Sie sicher, dass Sie Meteor tatsächlich einmal in Ihrer App anrufen, damit es ausgelöst wird ...
Tamara Wijsman

@Drake: Wenn Sie möchten, dass ich meinen Kommentar als Antwort platziere (wenn es für Sie funktioniert hat), lassen Sie es mich bitte wissen.
Tamara Wijsman

@ TomWijsman: Ich habe versucht, console.log(url);die Informationen zu bekommen! Ich schlage vor, dass Sie dies so vollständig wie eine Umgehungsantwort machen, da ich glaube, dass es der Community hilft, oder zumindest Leuten wie mir, die noch nicht mit Meteor vertraut sind ~
Drake Guan

Es ist viel einfacher, Mongochef zum Kopieren und Einfügen von Daten zu verwenden, als die Export- / Importbefehle. 3t.io/mongochef
Max Hodges

0

Ich habe lediglich die IP-Adresse meines Digital Ocean Droplet-Servers anstelle von localhost hinzugefügt, und es hat funktioniert:

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

BEARBEITEN: Verwenden Sie MUP, um Ihre Meteorprojekte bereitzustellen: https://github.com/zodern/meteor-up

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

Mup verwendet Docker und "verknüpft" Ihre 2 Container, wodurch sowohl die App als auch Mongo auf derselben VM (Server) gehostet werden. Ihre mongoDB sollte aus Sicherheitsgründen nicht über die öffentliche IP zugänglich sein.


wo hast du das hinzugefügt
Gaurav Arya

Es ist eigentlich eine schlechte Praxis, die öffentliche IP Ihrer VM für die MongoDB zu verwenden. Ich werde meine Antwort aktualisieren, um localhost zu verwenden.
Milean

-6

Sie müssen Ihre App in einem Terminalfenster laufen lassen, dann ein anderes öffnen und "meteor mongo" eingeben, und es sollte funktionieren!

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.