如何从Rails(控制台或rake)将用户添加到mongo?

发布于 2025-01-06 18:10:54 字数 963 浏览 2 评论 0原文

我想做相当于:

mongo --port 27xxx
use admin
db.addUser("venkman", "StayPuft!1")

但我想将其作为我的 rake db:seed 的一部分。似乎您想要使用新的数据库来实现这一点。我认为这个的一些变体:

Mongoid.database.eval('use admin; db.addUser("venkman", "StayPuft!1")' )

可以解决问题,但我没有太多运气:

Mongo::OperationFailure: Database command '$eval' failed: (errmsg: 
  'compile failed: JS Error: SyntaxError: missing ; before statement nofile_a:0'; ok: '0.0').
    from /home/user/.rvm/gems/ruby-1.9.2-p290/gems/mongo-1.5.2/lib/mongo/db.rb:520:in `command'
    from /home/user/.rvm/gems/ruby-1.9.2-p290/gems/mongo-1.5.2/lib/mongo/db.rb:407:in `eval'

我可以让这样的函数工作:

irb(main):023:0> Mongoid.database.eval(' function() { return 3+3; }' )
=> 6.0

所以看来 database.eval 不是用于编写数据库管理任务脚本的正确工具。从堆栈跟踪中可以合理确定此问题与 mongoid 无关。我可以使用什么东西来编写用户创建的脚本作为我的 rake db:seed 的一部分吗?

I'd like to do the equivalent of:

mongo --port 27xxx
use admin
db.addUser("venkman", "StayPuft!1")

But I'd like to do it as part of my rake db:seed. Seems like something you'd want to to with a fresh database. I thought that some variant of this:

Mongoid.database.eval('use admin; db.addUser("venkman", "StayPuft!1")' )

would do the trick, but I'm not having much luck with it:

Mongo::OperationFailure: Database command '$eval' failed: (errmsg: 
  'compile failed: JS Error: SyntaxError: missing ; before statement nofile_a:0'; ok: '0.0').
    from /home/user/.rvm/gems/ruby-1.9.2-p290/gems/mongo-1.5.2/lib/mongo/db.rb:520:in `command'
    from /home/user/.rvm/gems/ruby-1.9.2-p290/gems/mongo-1.5.2/lib/mongo/db.rb:407:in `eval'

I can get a function like this to work:

irb(main):023:0> Mongoid.database.eval(' function() { return 3+3; }' )
=> 6.0

So it seems that database.eval is not the right thing to use for scripting db admin tasks. Reasonably sure this issue isn't related to mongoid, from the stack trace. Is there something that I can use to script a user create as part of my rake db:seed?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

ゞ记忆︶ㄣ 2025-01-13 18:10:54

eval 失败,因为 javascript 代码是在数据库服务器的上下文中执行的,而不是在客户端 shell 中执行的。我不完全确定,但我认为你不能单独使用 Mongoid 做你想做的事。

但是,如果您使用 Ruby 驱动程序,代码将如下所示:

# set host and port with appropriate values
admindb = Mongo::Connection.new(host, port)['admin']
admindb.add_user("venkman", "StayPuft!1")

话虽如此,我不建议在您的代码中放置硬编码密码,因为每个人都可以看到它......

The eval fails because the javascript code is executed in the context of the database server, not the client shell. I am not totally sure, but I don't think you can do what you want with Mongoid alone.

However, if you use the Ruby driver, the code will look like this:

# set host and port with appropriate values
admindb = Mongo::Connection.new(host, port)['admin']
admindb.add_user("venkman", "StayPuft!1")

Having said that, I would not recommend putting hard coded passwords in your code were everybody can see it...

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文