如何将我的Rails应用程序连接到MongoLab? “失败,错误13:”未授权查询

时间:2015-05-13 08:05:18

标签: ruby-on-rails mongodb

这是我第一次尝试使用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变量内部。

2 个答案:

答案 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"] })