【问题标题】:MongoDB db.serverStatus() gives error when running using tunnel that is targeted to api.cloudfoundry.comMongoDB db.serverStatus() 在使用针对 api.cloudfoundry.com 的隧道运行时出错
【发布时间】:2012-09-10 15:37:00
【问题描述】:

接下来是控制台会话...

C:\Users\xxx>vmc tunnel myMongoDB
Getting tunnel connection info: OK

Service connection info:
  username : uuuu
  password : pppp
  name     : db
  url      : mongodb://uuuu:pppp@172.30.xx.xx:25200/db

Starting tunnel to myMongoDB on port 10000.
1: none
2: mongo
3: mongodump
4: mongorestore
Which client would you like to start?: 2
Launching 'mongo --host localhost --port 10000 -u uuuu -p pppp db'

MongoDB shell version: 2.0.6
connecting to: localhost:10000/db
> db.serverStatus()
{ "errmsg" : "need to login", "ok" : 0 }
>

我应该使用哪些凭据来登录(假设应该使用 db.auth)以消除错误“{“errmsg”:“需要登录”,“ok”:0 }” .

当我在我的机器上的 micro CF 中运行相同的程序时,它可以正常工作并给我预期的输出。

附:我正在尝试这个以了解我的应用程序上的当前连接,用 node.js 编写。尝试调试与数据库连接的一些问题。如果还有其他我可以使用的替代方法,请同时提出建议。

【问题讨论】:

  • 有人对这个问题有什么建议吗?
  • 我认为这将是该服务器的管理员用户(存储在管理服务器中的用户)。所以使用 admin db 然后执行 db.auth。
  • @christkv 我尝试使用“admin”db,但它显示以下错误... C:\Users\am185011>mongo --host localhost --port 10000 -u uuuu -p pppp admin MongoDB shell 版本:2.0.6 连接到:localhost:10000/admin Thu Sep 13 10:14:30 未捕获的异常:登录失败异常:登录失败 请注意,当我执行“显示用户”时,我也有一个“管理员”用户登录到“db”数据库。因此,我也对该用户尝试了上述命令,但最终结果相同。
  • @christkv 我尝试的另一种方法是在登录“db”数据库后执行“使用管理员”。 (运气不好)> 使用 admin 切换到 db admin > 显示集合 Thu Sep 13 10:07:47 未捕获的异常:错误:{“$err”:“unauthorized db:admin lock type:-1 client:172.30.49.241”, “代码”:10057 } > db.serverStatus(); {“errmsg”:“需要登录”,“ok”:0 } > 显示用户 Thu Sep 13 10:08:37 未捕获的异常:错误:{“$err”:“未经授权的数据库:管理员锁类型:-1 客户端:172.30.49.241", "代码" : 10057 }
  • @christkv 如果我没有理解您的评论并且做错了什么,请告诉我。

标签: mongodb cloud-foundry tunnel


【解决方案1】:

应该工作!不知道为什么你的隧道没有连接,我的直接建议是尝试另一个 MongoDB 实例,看看是否会发生同样的错误。

如果您尝试检查 node.js 应用程序上的绑定服务,您应该能够在 VCAP_SERVICES 环境变量中检查它们。例如;

var http = require('http');
var util = require('util');

http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.write(util.inspect(process.env.VCAP_SERVICES));
  res.write("\n\n************\n\n");
  res.end(util.inspect(req.headers));

}).listen(3000);

此代码当前在http://node-headers.cloudfoundry.com/ 运行以作为示例。但是,node.js 应用程序的 mongodb 连接应该自动配置到绑定服务。如果这对您不起作用,请告诉我。

【讨论】:

  • 嗨@dan-higham。感谢您的答复。想补充一些说明... 1.我与隧道的连接很好。我知道,因为我可以使用 db.myCollection.find(xx) 之类的连接进行其他操作。 2. 我不是在尝试调试服务连接。我正在尝试使用 db.open 函数调试我的代码打开到 mongodb 的连接数,因此想知道打开的连接数。我通常会看到使用“db.serverStatus()”,例如> db.serverStatus().connections; {“当前”:3,“可用”:19997 }
猜你喜欢
  • 2013-03-09
  • 1970-01-01
  • 2021-05-23
  • 2019-12-04
  • 2017-04-15
  • 2020-01-10
  • 2013-02-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多