这是我第一次尝试使用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"
这是我的杂种。生产数据库的配置:
production:
sessions:
default:
hosts:
- ds041831.mongolab.com:41831
database: heroku_app36774115
username: ENV['MONGOLAB_USERNAME']
password: ENV['MONGOLAB_PASSWORD']
在运行此代码时,我似乎可以从外壳连接到数据库(再次是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;%%>在我的YML配置文件中的Env变量中。
首先,您需要使用Admin角色创建用户
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.添加useradminanydatabase to 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"] })