我有一个带有nginx的流星应用程序,并且在同一台服务器上我有一个mongoDB数据库,它有一个身份验证。
当我想在ssh中连接数据库时,它可以正常使用身份验证。
但在流星应用程序上,我总是遇到502错误的网关错误。
我认为这是因为应用程序无法连接到数据库,但我不知道如何连接它。
在文件/etc/init/myapp.conf
上,我更改了mongo url:
export MONGO_URL=mongodb://user:password@127.0.0.1:27017/myapp
但我总是遇到同样的问题。
在文件/var/log/mongodb/mongodb.log
中,我有以下错误:
[initandlisten] connection accepted from 127.0.0.1:45266 #2680 (3 connections now open)
[conn2680] assertion 16550 not authorized for query on myapp.system.indexes ns:myapp.system.indexes query:{ ns: "myapp.users"$
[conn2680] ntoskip:0 ntoreturn:1000
[conn2680] end connection 127.0.0.1:45266 (2 connections now open)
[initandlisten] connection accepted from 127.0.0.1:45268 #2681 (3 connections now open)
[conn2681] assertion 16550 not authorized for query on myapp.system.indexes ns:myapp.system.indexes query:{ ns: "myapp.users"$
[conn2681] ntoskip:0 ntoreturn:1000
[conn2681] end connection 127.0.0.1:45268 (2 connections now open)
当我删除数据库中的身份验证时,它工作正常,但我需要此身份验证。
您知道如何通过身份验证将应用程序连接到数据库吗?
更新
在文件/home/myapp/myapp.log
中,我有:
Exception in setInterval callback: MongoError: not authorized for update on myapp.users
at Object.Future.wait (/home/myapp/bundle/programs/server/node_modules/fibers/future.js:449:15)
at [object Object].<anonymous> (packages/meteor.js:213:24)
at [object Object].MongoConnection.(anonymous function) [as update] (packages/mongo/mongo_driver.js:774:49)
at [object Object].update (packages/mongo/collection.js:581:29)
at AccountsServer.Ap._expireTokens (packages/accounts-base/accounts_server.js:1115:14)
at packages/accounts-base/accounts_server.js:1204:14
at [object Object]._.extend.withValue (packages/meteor.js:1122:17)
at packages/meteor.js:445:45
at runWithEnvironment (packages/meteor.js:1176:24)
- - - - -
at Function.MongoError.create (/home/myapp/bundle/programs/server/npm/node_modules/meteor/npm-mongo/node_modules/mongodb-core/lib/error.js:31:$
at toError (/home/myapp/bundle/programs/server/npm/node_modules/meteor/npm-mongo/node_modules/mongodb/lib/utils.js:114:22)
at /home/myapp/bundle/programs/server/npm/node_modules/meteor/npm-mongo/node_modules/mongodb/lib/collection.js:1047:60
at getLastErrorCallback (/home/myapp/bundle/programs/server/npm/node_modules/meteor/npm-mongo/node_modules/mongodb-core/lib/wireprotocol/2_4_s$
at /home/theroofwebapp/bundle/programs/server/npm/node_modules/meteor/npm-mongo/node_modules/mongodb-core/lib/connection/pool.js:455:18
at process._tickCallback (node.js:355:11)
答案 0 :(得分:0)
以下是您需要仔细检查的一些内容。
确保在您启动Meteor应用的任何地方导出export MONGO_URL
。您提到您正在使用/etc/init/myapp.conf
中的readWrite
。这听起来不是正确的地方。
确保您实际上在mongodb连接字符串中包含您的真实用户名和密码,并且连接字符串使用的是mongodb实际运行的正确端口。您在问题中包含的内容是一个通用示例,但也包含您的应用程序名称,因此不清楚这是否实际上是您正在使用的。
仔细检查您为Meteor应用程序使用的mongodb用户设置的角色。确保你至少扮演db.createUser(
{
user: "meteor",
pwd: "meteor",
roles: [ { role: "readWrite", db: "meteor_app" } ]
}
);
的角色。这是一个例子。
driver.findElement(By.id("element id")).click()
答案 1 :(得分:0)
连接到mongo shell并以管理员身份进行身份验证,然后尝试以下
use admin
db.system.users.update({"user" : "your_user"}, {$addToSet: {'otherDBRoles.myapp': 'readWrite'}}, false, false)
将您的db用户名和myapp替换为您的目标数据库名称