2012-07-23 8 views
5

Come si ottiene l'accesso al nodo master in Mongoid> 3.0?Accesso al nodo master Mongoid 3

In Mongoid < 3.0 è possibile utilizzare:

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

Il più vicino che posso trovare in 3 sembra essere:

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

Esiste un modo migliore per ottenere l'accesso a padroneggiare? O un modo per garantire che il comando venga valutato dal nodo principale?

risposta

6

Mongoid 3.0 utilizza ciclomotore e non il conducente 10gen, in modo da vedere Ciclomotore :: Cluster # with_primary

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

Ad esempio:

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 

uscita:

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

Si noti che altre possibili soluzioni come gruppo, aggregazione e mapredu ce sono raccomandati su eval.

+0

Grazie. Avevo un disperato bisogno di eseguire una riparazione, un "Mongoid.master.command ({'repairDatabase' => 1})" ma non potevo più nel mongoid 3. Invece ho fatto qualcosa del tipo "SomeModel.collection.database.command ({ 'repairDatabase' => 1}) " –

+0

E riguardo l'uso di' SomeModel.mongo_session'? – Dean

+1

sembra che il blocco 'User.collection.database.session.cluster.with_primary do' non sia necessario – akostadinov

Problemi correlati