Я хотел бы получить доступ к Meteor MongoDB от клиента Python, , в то время как Meteor работает.
Я не могу запустить mongod, потому что база данных Meteor заблокирована.
Как мне получить доступ к базе данных с другого клиента?
Я хотел бы получить доступ к Meteor MongoDB от клиента Python, , в то время как Meteor работает.
Я не могу запустить mongod, потому что база данных Meteor заблокирована.
Как мне получить доступ к базе данных с другого клиента?
Используйте Инструкции по развертыванию Meteor
Команда будет выглядеть так:
PORT=3000 MONGO_URL=mongodb://localhost:27017/myapp node bundle/main.js
Команда meteor
обеспечивает чистый способ. Чтобы получить URL-адрес работающего mongod:
meteor mongo -U
который вы можете проанализировать из python.
Meteor запускает mongod для вас на порт 3002 при запуске команды meteor
и сохраняет файл данных mongo в .meteor/local/db
Вывод из ps aux | grep 'mongod'
показывает команду mongod, которую использует метеорит:
/usr/local/meteor/mongodb/bin/mongod --bind_ip 127.0.0.1 --smallfiles --port 3002 --dbpath /path/to/your/project/.meteor/local/db
Поэтому просто подключите своего клиента mongo соответственно. В python:
>>> import pymongo
>>> con = pymongo.Connection(host='127.0.0.1', port=3002)
>>> con.database_names()
[u'meteor', u'local']
UPDATE: к сожалению, внесение изменений непосредственно в mongo таким образом не будет отображаться в реальном времени в приложении, но изменения отразятся на полной загрузке страницы (re).
Вы также можете найти его на стороне сервера, используя:
process.env.MONGO_URL
Даже если вы не устанавливаете эту переменную среды при запуске, она получает значение по умолчанию. Кажется, что это происходит внутри (пакеты/mongo/remote_collection_driver.js)
Тот, который задан meteor mongo -U
, похоже, восстанавливает домен /ip и имя db по умолчанию, но использует порт, хранящийся в файле.
Вы можете поместить это в любом месте в папку сервера и прочитать его из командной строки.
console.log('db url: ' + process.env.MONGO_URL);
Я установил веб-страницу, чтобы отобразить ее, чтобы дважды проверить в тестах селена, что мы используем тестовую базу данных, а не переписывать данные в реальном времени.
А вот оболочка script, чтобы получить Mongo URI и 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
`` ``
Относительно 10-секундной задержки на обновления: Tail MongoDB oplog! Там больше информации о том, как это сделать:
http://meteorhacks.com/lets-scale-meteor.html
Удостоверьтесь, что вы устанавливаете смарт-коллекции и используете их (создайте копии своих коллекций с помощью Meteor.SmartCollection вместо Meteor.Collection), и вы обнаружите, что обновления по сути являются немедленными.