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?
Utilisez les instructions de déploiement Meteor
La commande ressemblera à ceci:
PORT=3000 MONGO_URL=mongodb://localhost:27017/myapp node bundle/main.js
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.
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.
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.
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
`` ``