我希望能够从一个Python客户端访问Meteor正在运行的MongoDB数据库。
由于Meteor数据库被锁定,我无法启动mongod。
我该如何从另一个客户端访问这个数据库?
meteor
命令提供了一种简洁的方式。获取正在运行的 mongod 的URL:
meteor mongo -U
你可以从Python中解析它。
meteor
命令时,Meteor 会为你启动端口为3002的 mongod,并将mongo数据文件存储在 .meteor/local/db
中。
ps aux | grep 'mongod'
的输出显示 Meteor 使用的 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']
更新:不幸的是,以这种方式直接在 MongoDB 中进行更改不会实时反映在应用程序中,但更改将在完整页面重新加载时反映出来。
您也可以在服务器端代码中使用以下方式找到它:
process.env.MONGO_URL
meteor mongo -U
给出的是重建默认域名/IP和数据库名称,但使用文件中存储的端口。console.log('db url: ' + process.env.MONGO_URL);
我建立了一个网页,用于在Selenium测试中显示它,以便确认我们正在使用测试数据库,并且不会覆盖实时数据。
#!/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
````
http://meteorhacks.com/lets-scale-meteor.html
请确保您安装了智能集合并使用它们(使用Meteor.SmartCollection实例化您的集合,而不是使用Meteor.Collection),您会发现更新几乎是即时的。
meteor mongo -U <myproj>
提供的mongo URL连接到托管在 <myproj>.meteor.com 上的受密码保护的实例时,验证失败。我操作有误吗?这是设计上的问题还是一个bug? - Benson