2012-07-23 15 views
5

तक पहुंच आप Mongoid> 3.0 में मास्टर नोड तक कैसे पहुंच सकते हैं?Mongoid 3 मास्टर नोड

Mongoid < 3.0 में आप इस्तेमाल कर सकते हैं:

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

वहाँ पहुँच में महारत हासिल करने के लिए एक बेहतर तरीका है:

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

निकटतम मैं 3 में पा सकते हैं प्रतीत हो रहा है? या मास्टर नोड द्वारा कमांड का मूल्यांकन सुनिश्चित करने का एक तरीका है?

उत्तर

6

Mongoid 3.0 इंजन से साइकिल और नहीं 10gen ड्राइवर का उपयोग करता है, तो देखने के इंजन से साइकिल :: क्लस्टर # with_primary

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

उदाहरण के लिए:

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 

उत्पादन:

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

ध्यान दें कि समूह, एकत्रीकरण, और मैप्रेडू जैसे अन्य संभावित समाधान eval पर सीई की सिफारिश की जाती है।

+0

धन्यवाद। मुझे मरम्मत चलाने के लिए बेहद जरूरी जरूरत है, "Mongoid.master.command ({'repairDatabase' => 1})" लेकिन अब मैंगॉयड 3 में नहीं हो सका। इसके बजाय मैंने कुछ किया "SomeModel.collection.database.command ({ 'repairDatabase' => 1}) " –

+0

'SomeModel.mongo_session' का उपयोग करने के बारे में क्या? – Dean

+1

ऐसा लगता है कि ब्लॉक 'User.collection.database.session.cluster.with_primary do' आवश्यक नहीं है – akostadinov