как добавить пользователя в монго из Rails (консоль или грабли)? - PullRequest
0 голосов
/ 20 февраля 2012

Я хотел бы сделать эквивалент:

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?

1 Ответ

1 голос
/ 20 февраля 2012

Ошибка eval, потому что код javascript выполняется в контексте сервера базы данных, а не клиентской оболочки.Я не совсем уверен, но не думаю, что вы можете делать то, что хотите, только с Mongoid.

Однако, если вы используете драйвер Ruby, код будет выглядеть так:

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

Сказав это, я бы не рекомендовал вставлять жестко запрограммированные пароли в ваш код, если бы все могли это видеть ...

...