2012-11-07 9 views
29

मैं एक वेब एप्लिकेशन पर काम कर रहा हूं जो PHP से मोंगोडीबी डेटाबेस से कनेक्ट करने का प्रयास कर रहा है। पेज के 90% में सब कुछ ठीक काम करता है लोड करता है, लेकिन में अन्य 10% यह निम्न अपवाद फेंकता है जब मैं एक संग्रह को अद्यतन करने का प्रयास करें:PHP + MongoDB: संदेश के साथ अनकॉच अपवाद 'MongoCursorException' कोई ऐसी फ़ाइल या निर्देशिका नहीं '

Fatal error: Uncaught exception 'MongoCursorException' with message 'No such file or directory' in D:\webDev\webSites\str\dev3\_global_classes\User.php:40 
Stack trace: 
#0 D:\webDev\webSites\str\dev3\_global_classes\User.php(40): 
    MongoCollection->update(Array, Array, Array) 
#1 D:\webDev\webSites\str\dev3\_init\_init.php(8): 
    User->__construct(NULL) 
#2 D:\webDev\webSites\str\dev3\index.php(3): 
    include('D:\webDev\webSi...') 
#3 {main} thrown in D:\webDev\webSites\str\dev3\_global_classes\User.php on line 40 

PHP कोड:

public function __construct($SESSIONID = null) {   
    User::$_users_collection = Main::$_mongo->selectCollection("users"); 

    ... 

    $query = array('session_id' => session_id()); 

    $expiry = time() + Main::$_lifetime; 
    $data = array(
     'session_id' => session_id(), 
     'expiry' => (string)$expiry, 
     'ip' => $_SERVER['REMOTE_ADDR'] 
    ); 

    $options = array(
     'upsert' => true, 
     'safe' => true 
    ); 

    try { 
     User::$_users_collection->update($query, array('$set' => $data), $options); 
    } catch (Exception $e) { 
     throw $e; 
    } 

    ... 
} 

मोंगो संस्करण :

Wed Oct 17 10:53:48 /usr/bin/mongos db version v2.0.7, pdfile version 4.5 starting (--help for usage) 
Wed Oct 17 10:53:48 git version: 875033920e8869d284f32119413543fa475227bf 
Wed Oct 17 10:53:48 build info: Linux ip-10-2-29-40 2.6.21.7-2.ec2.v1.2.fc8xen #1 SMP Fri Nov 20 17:48:28 EST 2009 x86_64 BOOST_LIB_VERSION=1_41 

मेरे मोंगो क्लस्टर केवल एक ठीकरा है, मेरे php संस्करण है: 5.4.4, और मेरे मोंगो ड्राइवर संस्करण है: 1.2.12।

+0

क्या मोंगोडीबी सर्वर लॉग में कुछ भी प्रासंगिक है? –

+1

मोंगो क्लाइंट पीईसीएल संस्करण 1.3.6 पर है। मैं बाद के संस्करण की कोशिश करने का सुझाव दूंगा क्योंकि यह थोड़ी देर के लिए सक्रिय विकास में है। https://github.com/mongodb/mongo-php-driver/tags – methai

+1

क्या आप कोड गूंजने का प्रयास कर सकते हैं? इससे हमें समस्या का विस्तार से विश्लेषण करने में मदद करनी चाहिए। कैच ब्लॉक में कृपया '$ e-> getCode()' का उपयोग करें। –

उत्तर

0

मुश्किल पता करने के लिए जहां यह होता है, लेकिन this page विस्तार से बताता है कि यह अपवाद

0

मोंगो डीबी पुस्तकालय php.ini

में स्थापित किया जा OT विंडो

http://www.php.net/manual/en/mongo.installation.php#mongo.installation.windows https://s3.amazonaws.com/drivers.mongodb.org/php/index.html

के लिए पैदा कर सकता है

लिनक्स

के लिए जबकि वास्तविक MongoDB से कनेक्ट कर 10

http://www.php.net/manual/en/mongo.installation.php#mongo.installation.nix

यह मेरी मदद शायद पीएचपी

0

के माध्यम से चलाने के लिए MongoDB, पीएचपी मोंगो ग्राहक एक विफलता का सामना करना पड़ता।

जैसा कि आपने कहीं और कहा है (https://groups.google.com/forum/?fromgroups=#!topic/mongodb-user/wqcCNQgiJAQ), आप VMWare के माध्यम से MongoDB चलाते हैं, जो अब कनेक्शन समस्याओं का कारण बन सकता है।

0

मैं यह त्रुटि काफ़ी देखा है और यह समझ में आता है:

MongoDB कर्सर अपवाद है जब वहाँ एक TIMEOUT कर्सर यात्रा के दौरान होता है उठाती है। यही है, अगर आप एक बड़े डेटासेट के लिए मोंगो पर एक प्रश्न जारी करते हैं, तो कर्सर आवंटित करते हैं। फिर, आप कर्सर पर फिर से प्रयास करते हैं, एक बार में अपने परिणामों को पुनः प्राप्त करते हैं, जो सामान्य कर्सर व्यवहार है। लेकिन, यदि आप अभी भी पर्याप्त समय के बाद परिणाम पुनर्प्राप्त कर रहे हैं, तो आपको उपर्युक्त संदेश मिलता है।

इस के लिए समाधान दो बातें हो सकता है:

  • (एप्लिकेशन परत) एक अस्थायी संग्रह में अपने परिणामों को प्राप्त और अधिक पुनरावृति कि (बदसूरत);
  • (कनेक्शन परत) पूछताछ से पहले अपना टाइमआउट उच्च निर्धारित करें (यह संभव है कि यह संभव है कि यह संभव हो)।

नोट करें कि आपके परिणाम भिन्न हो सकते हैं, शुभकामनाएँ।

2

त्रुटि कोड $ ई-> getCode(); का उपयोग कर:

try { 
     User::$_users_collection->update($query, array('$set' => $data), $options); 
    } catch (MongoCursorException $e) { 
    echo "error message: ".$e->getMessage()."\n"; 
    echo "error code: ".$e->getCode()."\n"; 
    } 

और त्रुटि कोड के साथ की तुलना में मोंगो कर्सर अपवाद त्रुटियों की सूची की जाँच करें: http://www.php.net/manual/pt_BR/class.mongocursorexception.php

उदाहरण है अगर आप मिल गया के लिए त्रुटि कोड 3 "यह संकेत हो सकता है आप रैम या कुछ से बाहर हैं अन्य असाधारण परिस्थिति। "

नोट: सुरक्षित विकल्प के उपयोग से बचें, बहिष्कृत है। WriteConcern w विकल्प का उपयोग करें, और भी विकल्प साबित होगा।

त्रुटि के बारे में:।। "गलत तरीके से एक कर्सर तक पहुँचने या एक त्रुटि एक उत्तर प्राप्त की वजह से किसी भी आपरेशन कि डेटाबेस को जानकारी भेजता है और एक प्रतिक्रिया के लिए इंतजार कर रहा है एक MongoCursorException फेंक कर सकते हैं केवल एक अपवाद है नया मोंगो क्लाइंट() (एक नया कनेक्शन बनाना), जो केवल मोंगोकनेक्शन अपवादों को फेंक देगा। "(http://php.net/manual/en/class.mongocursorexception.php)

संबंधित मुद्दे