这是我第一次尝试使用MongoDB部署Rails应用程序时,我很难尝试将其连接到我的远程MongoDB数据库。我花了两天时间研究并试图解决它无济于事。
当我尝试查询任何内容时,收到此错误消息:
Moped::Errors::QueryFailure: The operation: #<Moped::Protocol::Query
@length=94
@request_id=4
@response_to=0
@op_code=2004
@flags=[]
@full_collection_name="heroku_app36774115.apps"
@skip=0
@limit=-1
@selector={"$query"=>{}, "$orderby"=>{:_id=>1}}
@fields=nil>
failed with error 13: "not authorized for query on heroku_app36774115.apps"
这是我的生产数据库的mongoid.yml配置:
production:
sessions:
default:
hosts:
- ds041831.mongolab.com:41831
database: heroku_app36774115
username: ENV['MONGOLAB_USERNAME']
password: ENV['MONGOLAB_PASSWORD']
当我运行此代码时,似乎我可以从shell连接到数据库(同样,我是MongoDB的新手):
mongo ds041831.mongolab.com:41831/heroku_app36774115 -u <username> -p <password>
当前用户配置为:
{
"_id": "heroku_app36774115.<username>",
"user": "<username>",
"db": "heroku_app36774115",
"credentials": {
"MONGODB-CR": "xxxx"
},
"roles": [
{
"role": "dbOwner",
"db": "heroku_app36774115"
}
]
}
更新:这是愚蠢的事。我没有意识到我需要&lt; %%&gt;我的YML配置文件中的ENV变量内部。
答案 0 :(得分:0)
首先,您需要创建具有管理员角色的用户
use admin
db.createUser(
{
user: "siteUserAdmin",
pwd: "password",
roles: [ { role: "userAdminAnyDatabase", db: "YOUR_DB_NAME_HERE" } ]
}
)
然后设置用户名和密码
production:
sessions:
default:
hosts:
- ds041831.mongolab.com:41831
database: heroku_app36774115
username: ENV['siteUserAdmin']
password: ENV['password']
答案 1 :(得分:0)
1.将userAdminAnyDatabase添加到admin db
$ mongo admin
> db.addUser({ user: "myadmin", pwd: "1234", roles: ["userAdminAnyDatabase"] })
2.开启身份验证
auth = true
setParameter = enableLocalhostAuthBypass=0
3.使用新的myadmin用户连接到您想要的任何数据库并添加更多用户:
$ mongo another -u myadmin -p 1234
> db.addUser({ user: "user", pwd: "1234", roles: ["readWrite"] })