我想在Meteor运行时从Python客户端访问Meteor的MongoDB。
我无法启动僧侣神,因为流星的数据库被锁定了。
如何从其他客户端访问数据库?
meteor
命令提供了一种干净的方法。 要获取正在运行的 mongod 的 URL,请执行以下操作:
meteor mongo -U
你可以从Python解析。
运行 meteor
命令时,Meteor 会在端口 3002 上为你启动 mongod,并将 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 客户端即可。 在蟒蛇中:
>>> import pymongo
>>> con = pymongo.Connection(host='127.0.0.1', port=3002)
>>> con.database_names()
[u'meteor', u'local']
更新:不幸的是,以这种方式直接在 mongo 中进行更改不会实时反映在应用程序中,但更改将反映在整个页面(重新)加载中。
使用 Meteor 部署说明
该命令将如下所示:
PORT=3000 MONGO_URL=mongodb://localhost:27017/myapp node bundle/main.js
您还可以使用以下方法从服务器端代码中找到它:
process.env.MONGO_URL
即使您在运行时未设置此环境变量,它也会设置为默认值。 这似乎是内部找到它的方式(packages/mongo/remote_collection_driver.js)
一个由meteor mongo -U
给出,似乎重建了默认的域/ip和db-name,但使用存储在文件中的端口。
您可以将其放在服务器文件夹中的任何位置,然后从命令行读取它。
console.log('db url: ' + process.env.MONGO_URL);
我设置了一个网页来显示它,以仔细检查我们正在使用测试数据库的硒测试,而不是覆盖实时数据。
这里有一个 shell 脚本来获取 Mongo URI 和 Mongo 数据库:
#!/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 秒延迟:尾随 MongoDB oplog!有关如何执行此操作的更多信息,请单击此处:
http://meteorhacks.com/lets-scale-meteor.html
确保安装智能集合并使用这些集合(使用 Meteor.SmartCollection 而不是 Meteor.Collection 实例化您的集合),您会发现更新基本上是即时的。