2012-07-23 43 views
5

Làm thế nào để bạn có quyền truy cập vào nút chính trong Mongoid> 3.0?Truy cập vào nút chính Mongoid 3

Trong Mongoid < 3.0 bạn có thể sử dụng:

Mongoid::Config.master.eval('...') 

Gần nhất tôi có thể tìm thấy trong 3 có vẻ là:

klass.collection.database.command(eval: '...') #=> failed with error "not master" 

Có cách nào tốt hơn để có thể truy cập để làm chủ? Hoặc một cách để đảm bảo lệnh được đánh giá bởi nút chính?

Trả lời

6

Mongoid 3.0 sử dụng Xe máy và không người lái 10gen, vì vậy thấy Moped :: Cụm # with_primary

http://rubydoc.info/github/mongoid/moped/master/Moped/Cluster:with_primary

Ví dụ:

User.collection.database.session.cluster.with_primary do 
    p User.collection.database.command(eval: 'function() { return 3+3; }') 
    p User.collection.database.command(ping: 1) 
end 

đầu ra:

{"retval"=>6.0, "ok"=>1.0} 
{"ok"=>1.0} 

Lưu ý rằng các giải pháp có thể khác như nhóm, tập hợp và mapredu ce được đề nghị trên eval.

+0

Cảm ơn bạn. Tôi rất cần thiết để chạy một sửa chữa, một lá "Mongoid.master.command ({'repairDatabase' => 1})" nhưng không thể nữa trong mongoid 3. Thay vào đó tôi đã làm một cái gì đó như "SomeModel.collection.database.command ({ 'repairDatabase' => 1}) " –

+0

Còn về việc sử dụng' SomeModel.mongo_session' thì sao? – Dean

+1

có vẻ như khối 'User.collection.database.session.cluster.with_primary do' không cần thiết – akostadinov

Các vấn đề liên quan