web-dev-qa-db-fra.com

Comment accéder à MongoDB de Meteor depuis un autre client pendant que Meteor est en cours d'exécution?

J'aimerais accéder à MongoDB de Meteor à partir d'un client Python, pendant que Meteor s'exécute .

Je ne peux pas démarrer un mongod car la base de données Meteor est verrouillée.

Comment accéder à la base de données à partir d'un autre client?

54
Joseph Turian

Utilisez les instructions de déploiement Meteor

La commande ressemblera à ceci:

   PORT=3000 MONGO_URL=mongodb://localhost:27017/myapp node bundle/main.js
6
Joseph Turian

La commande meteor fournit un moyen propre. Pour obtenir l'URL du mongod en cours d'exécution:

meteor mongo -U

que vous pouvez analyser à partir de python.

69
debergalis

Meteor démarre le mongod pour vous sur le port 3002 lorsque vous exécutez la commande meteor et stocke le fichier de données mongo dans .meteor/local/db

La sortie de ps aux | grep 'mongod' affiche la commande mongod utilisée par météore:

/usr/local/meteor/mongodb/bin/mongod --bind_ip 127.0.0.1 --smallfiles --port 3002 --dbpath /path/to/your/project/.meteor/local/db

Il suffit donc de connecter votre client mongo en conséquence. En python:

>>> import pymongo
>>> con = pymongo.Connection(Host='127.0.0.1', port=3002)
>>> con.database_names()
[u'meteor', u'local']

MISE À JOUR: Malheureusement, les modifications effectuées directement dans Mongo de cette manière ne seront pas répercutées en direct dans l'application, mais les modifications seront répercutées sur une (nouvelle) page complète.

37
danny

Vous pouvez également le trouver à partir du code côté serveur en utilisant:

process.env.MONGO_URL

Même si vous ne définissez pas cette variable d'environnement lors de son exécution, celle-ci est définie sur la valeur par défaut. Cela semble être la façon dont on le trouve en interne (packages/mongo/remote_collection_driver.js)

Celui qui est donné par meteor mongo -U semble reconstruire le domaine/ip et le nom de base de données par défaut, mais utilise le port stocké dans le fichier.

Vous pouvez le placer n'importe où dans le dossier du serveur et le lire à partir de la ligne de commande.

console.log('db url: ' + process.env.MONGO_URL);

J'ai configuré une page Web pour l'afficher afin de vérifier dans les tests Selenium que nous utilisons la base de données de tests, sans écraser les données en direct.

2
Alex028502

Et voici un script Shell pour obtenir Mongo URI et Mongo Database:

#!/bin/bash -eux

read -s -p "Enter Password: " password

cmd=$(meteor mongo --url myapp.meteor.com << ENDPASS
$password
ENDPASS)
mongo_uri=$(echo $cmd | cut -f2 -d" ")
mongo_db=$(echo $mongo_uri | cut -d/ -f 4)

#my_client_command_with MONGODB_URI=$mongo_uri MONGO_DB=$mongo_db

`` ``

0
Pierre Ozoux