1

我正在尝试在应用程序的测试服务器上使用带有 ReactiveMongo (0.9) 的 Play (2.1) 应用程序。但是,当我们的应用程序在我的开发盒上运行时,能够很好地存储图像元数据,甚至指向 mongo 测试服务器上安装的 mongo 2.2。甚至用“play stage”运行,然后直接用java 1.6.0运行。但是,以同样的方式运行,同样在测试服务器上使用 Java 1.6.0,应用程序会不断记录此错误:

rcaMongoDBSystem - 整个节点集不可达,是网络问题吗?rcaMongoDBSystem - 整个节点集不可达,是网络问题吗?rcaMongoDBSystem - 整个节点集不可达,是网络问题吗?

而不仅仅是在初始化期间......它无限期地重复。我在其他地方看到过这个错误,但我认为这些解决方案不适用于此。从应用程序的测试服务器,我能够成功地远程登录到 mongo 测试服务器上的端口 27017。我看到我的本地安装和应用程序日志的测试服务器安装都使用相同的 mongodb url。

所以根据我所说的,我相信我可以消除:

  • 阻塞的端口
  • Mongo服务器宕机
  • 指向错误的mongo服务器
  • Mongo 版本不匹配
  • Java 版本不匹配

我正在浏览 reactivemongo 源,但当 MongoChannels 未设置为身份验证或就绪状态(可用)时,似乎会出现错误。我打算尝试远程调试,看看哪里出了问题,但是我的时间不多了,所以我希望能得到一两个故障排除技巧。

谢谢!

4

1 回答 1

2

好吧,想通了。目前,我们在同一个应用程序上运行 Casbah/Salat。配置文件中有一个 mongodb.uri 可以被两者读取。但是,ReactiveMongo 似乎仅在包含数据库名称时才有效,根据 mongodb“连接字符串 uri”规范:

http://docs.mongodb.org/manual/reference/connection-string/

...如果您有需要进行身份验证的凭据,则只需要包含数据库。在我们的例子中,我们没有凭据,所以 Casbah 不包括数据库。无论如何我都添加了它...... casbah 安全地忽略了它,并且 reactivemongo 工作。我忽略了在测试配置文件中做同样的事情,所以即使它显示了正确的主机,它也不会正常工作。

我看到一个字符串中的主机 url + db 名称如何替换两个字段“mongodb.servers”和“mongodb.db”,但如果不符合 mongo 的类似规范,它可能会令人困惑。

于 2013-06-25T16:29:54.033 回答