Comment utiliser un MongoDB existant dans un projet Meteor?

84

Disons qu'il existe un serveur MongoDB en cours d'exécution pour un client GUI (par wxPython ) pendant un certain temps.

Comment puis-je connecter mon nouveau projet Meteor à mon MongoDB déjà existant ?

Drake Guan
la source
Dror ( stackoverflow.com/users/460278/dror ) a la bonne réponse ci-dessous: stackoverflow.com/a/12996674/1114274
Mike Graf
Merci pour le commentaire. Je sais que la solution de @ Dror est beaucoup plus officielle qu'un hack, mais j'ai déjà attribué une réponse auparavant. Je ne suis pas tout à fait sûr que ce soit un bon comportement et permis de changer / mettre à jour "réponse" alors?
Drake Guan
"Vous pouvez modifier la réponse acceptée ou simplement la désaccepter à tout moment." meta.stackexchange.com/a/5235/191226
Mike Graf
1
Merci beaucoup de m'avoir signalé cela. Je suis plus confiant maintenant.
Drake Guan

Réponses:

156

Utilisez la variable d'environnement MONGO_URL. Quelque chose comme:

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

Remplacez your_dbpar meteorou par la base de données que vous souhaitez utiliser.

Dror
la source
4
Je suis coincé. Pouvez-vous expliquer comment remplacer your_db par "meteor"
Surjith SM
3
notez que cela ne fonctionnera PAS sur prod en cas de déploiement sur meteor - voir stackoverflow.com/questions/21971036
...
2
@SurjithSM export MONGO_URL=mongodb://localhost:27017/my_database_namemettra les données dans une base de données nommée my_database_name. Il voulait dire que si tu veux, tu peux le faire export MONGO_URL=mongodb://localhost:27017/meteor. J'ai pensé que je vous conseillerais de nommer le nom de votre base de données comme celui de votre projet.
Benjamin Crouzier
1
Cela peut-il être fait avec un fichier de configuration? Essayé avec settings.json et cela ne fonctionnera pas
Kostanos
1
cela a écrasé mon application locale.
Deborah
14

Nous utilisons npm:

  • Créez un package.jsonfichier avec npm init, si vous n'en avez pas déjà un.

  • Entrez et modifiez la ligne suivante dans ce fichier (en remplaçant tous les <...>):

"scripts": {"meteor": "MONGO_URL=mongodb://<USER>:<PASSWORD>@<SERVER>:<PORT>/<DB> meteor"}
  • Vous pouvez alors démarrer meteor avec justenpm run meteor
malix
la source
'MONGO_URL' n'est pas reconnu comme une commande interne ou externe
Abdul Hameed
1
c'est une variable d'environnement, assurez-vous qu'il n'y a pas d'espace autour du signe =
malix
9

Dans les commentaires de la réponse de Danny, Tom Wijsman recommande de patcher packages / mongo-livingata / mongo_driver.js, ligne 21. Un meilleur endroit est dans app / meteor / run.js, ligne 460. De cette façon, la variable d'environnement est toujours sélectionnée si elle est présente , comme lors de l'exécution de Meteor sur Heroku. Remplacez simplement le code par défaut mongodb: //127.0.0.1 par l'emplacement de votre serveur MongoDB.

David Wihl
la source
4

Vous pouvez utiliser db.copyDatabase pour ce faire, avec une mise en garde indiquant qu'il y a un bogue et que vous ne pouvez pas mettre à jour les données dans Meteor. Voir https://github.com/meteor/meteor/issues/61

Si vous utilisez la version de développement de Meteor, vous pouvez transférer des données à partir d'un serveur MongoDB en cours d'exécution en démarrant votre application Meteor, puis en faisant:

mongo --port 3002

Cela vous connectera au serveur Mongo de l'application Meteor. Maintenant, utilisez db.copyDatabase comme ceci:

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

Cela copiera la base de données myappDatabase d'un serveur MongoDB fonctionnant sur le port standard sur localhost, sur le serveur Mongo de l'application Meteor. Le nom de la base de données utilisé par l'application Meteor est «meteor».

Josh Wulf
la source
2

Copiez simplement les données dans la base de données Meteor MongoDB - aucune raison d'essayer de connecter Meteor à la base de données existante et de risquer d'écraser des choses.

Utilisez mongoexportpour vider vos collections individuellement, puis mongoimportpour importer les fichiers dans la base de données nommée meteordans l'instance Meteor MongoDB. L'instance Meteor MongoDB s'exécute sur le port 3002 avec bind_address 127.0.0.1 et les fichiers de données se trouvent dans le sous-répertoire du projet Meteor .meteor/local/db.

Consultez la documentation si vous n'êtes pas familier avec l'import / export dans MongoDB.

Danny
la source
Cela signifie-t-il que nous devrions fournir un hébergement mongodb à Meteor au lieu de l'hébergement par d'autres moyens?
Drake Guan
2
@Drake: À moins que vous ne puissiez ajuster Meteor pour qu'il fonctionne avec votre base de données. app/lib/mongo_runner.jsdécide comment le lancer (il se peut que vous n'ayez même pas besoin de code de lancement, regardez donc comment le désactiver). La connexion semble se faire à l'intérieur packages/mongo-livedata/mongo_driver.js, je pense que vous pouvez simplement changer le paramètre url sur la ligne 21. Si vous voulez connaître sa valeur, insérez console.log(url);sur la ligne avant cela, redémarrez Meteor et surveillez de près votre sortie Meteor. Assurez-vous d'appeler Meteor une fois dans votre application pour qu'il se déclenche ...
Tamara Wijsman
@Drake: Si vous voulez que je place mon commentaire comme réponse (si cela a fonctionné pour vous), faites-le moi savoir.
Tamara Wijsman
@TomWijsman: J'ai essayé console.log(url);et j'ai obtenu l'info! Je vous suggère de rendre cela aussi complet qu'une réponse de contournement car je pense que cela aide la communauté, ou du moins, des gens comme moi ne connaissent pas encore le météore ~
Drake Guan
mongochef est beaucoup plus facile à utiliser pour copier et coller des données, plutôt que les commandes d'exportation / importation. 3t.io/mongochef
Max Hodges
0

Tout ce que j'ai fait a été d'ajouter l'adresse IP de mon serveur Digital Ocean Droplet, au lieu de localhost, et cela a fonctionné:

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

EDIT: utilisez MUP pour déployer vos projets météores: https://github.com/zodern/meteor-up

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

Mup utilise Docker, et "liera" vos 2 conteneurs, hébergeant ainsi à la fois l'application et mongo sur la même VM (serveur). Votre mongoDB ne devrait pas être accessible à partir de l'adresse IP publique pour des raisons de sécurité.

Milean
la source
où avez-vous ajouté cela?
Gaurav Arya
c'est en fait une mauvaise pratique d'utiliser l'adresse IP publique de votre VM pour le mongoDB, je vais mettre à jour ma réponse pour utiliser localhost.
Milean
0

J'ai passé beaucoup de temps et j'ai découvert qu'il fallait des citations autour de l'URL:

export MONGO_URL='mongodb://localhost/meteor'
export MONGO_OPLOG_URL='op log url'
Shaharyar
la source
-6

Vous devez garder votre application en cours d'exécution dans une fenêtre de terminal, puis en ouvrir une autre et taper "meteor mongo" et cela devrait fonctionner!

pablo escobrah
la source