简化案例:
我创建了一个新的 rails 3.2 项目,没有活动记录。我将 mongoid 3.0.0.rc 添加到 Gemfile,然后rails g mongoid:config
. 我编辑我mongoid.yml
的看起来像我在下面发布的那个(除了主机现在设置为localhost:27068
)。
我在 mongodb 中添加了一个管理员用户:
$ mongo localhost/admin
> db.addUser(myadmin,adminpass)
我还在我的数据库中添加了一个普通用户:
use mydb
> db.addUser(myuser, mypassword)
我确认我可以连接到我的数据库:
$ mongo localhost/mydb -u myuser -pmypassword
MongoDB shell version: 2.0.4
connecting to: localhost/mydb
> _
之后,我从mongod
switch--auth
开始强制身份验证:
$ mongod --auth --dbpath /my/db/path
现在一切似乎都很好,我创建了一些随机脚手架,例如:
$ rails g scaffold User name email
并尝试在浏览器中运行项目:localhost:3000/users。繁荣!我被下面发布的错误消息击中。
这是mongoid中的错误吗?还是我错过了什么?
原始问题
在带有 mongoid 3 rc 的 Rails 3.2 项目中,我无法对 MongoHQ 托管数据库执行任何操作。一个简单的登录操作查询给了我这样的错误信息:
The operation: #<Moped::Protocol::Query
@length=83
@request_id=3
@response_to=0
@op_code=2004
@flags=[]
@full_collection_name="mydb.users"
@skip=0
@limit=-1
@selector={"name"=>"Abbas"}
@fields=nil>
failed with error 10057: "unauthorized db:mydb lock type:-1 client [some ip]"
这是我的mongoid.yml
样子:
development:
sessions:
default:
database: mydb
user: myuser
password: mypassword
hosts:
- flame.mongohq.com:27068
options:
consistency: :strong
options:
include_type_for_serialization: true
所以我做错了。db 用户在 MongoHQ 面板中未标记为“只读”。而且我没有部署到 Heroku;只是在我的本地主机上测试。
任何帮助表示赞赏。