如何将我的Rails应用程序连接到MongoLab? "failed with error 13: " 无权查询



这是我第一次尝试使用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"] })

最新更新