2015-03-02 12 views
6

मुझे सिम्फनी 2 में मोंगो डीबी स्थापित करने में कोई समस्या है।Symfony2 MongoDB एकाधिक कनेक्शन त्रुटि

चश्मा:

"Symfony": "2.6.*" 
"doctrine/mongodb-odm": "1.0.*@dev", 
"doctrine/mongodb-odm-bundle": "3.0.*@dev" 

मैं 2 अलग बंडलों, nxtlog और nxtsurvey, MongoDB में में इस्तेमाल किया 2 डेटाबेस है। मेरे पास मूल मुद्दा यह था कि विकल्पों में जोड़े गए डीबी नाम को ध्यान में नहीं रखा गया था, जिसके परिणामस्वरूप डेटाबेस 'डिफ़ॉल्ट' का उपयोग किया जाना था, जो निश्चित रूप से मौजूद नहीं है। मैं डिफ़ॉल्ट_कनेक्शन और default_manager, और यहां तक ​​कि डिफ़ॉल्ट_डेटाबेस भी नहीं जोड़ना चाहता क्योंकि दोनों कनेक्शन गैर-कोर बंडलों में उपयोग किए जाते हैं।

==== प्रयास # 1 ====

यहाँ मूल config मैं था:

doctrine_mongodb: 
    connections: 
     nxtlog: 
      server: "%nxtlog_database_server%" 
      options: 
       username: "%nxtlog_database_username%" 
       password: "%nxtlog_database_password%" 
       db: "%nxtlog_database_name%" 
     nxtsurvey: 
      server: "%nxtsurvey_database_server%" 
      options: 
       username: "%nxtsurvey_database_username%" 
       password: "%nxtsurvey_database_password%" 
       db: "%nxtsurvey_database_name%" 
    document_managers: 
     nxtlog: 
      mappings: 
       NxtLogBundle: ~ 
     nxtsurvey: 
      mappings: 
       NxtVibeSurveyBundle: ~ 

आदेश यह काम करने के लिए, मैं के नाम जोड़ा प्रत्येक दस्तावेज़ एनोटेशन में डीबी:

/** 
* @MongoDB\Document(db="nxtlog") 
*/ 
class ErrorLogs 

जो एक अस्थायी समाधान है, लेकिन चूंकि मेरी योजना का पुन: उपयोग करना है मेरी अन्य परियोजनाओं में बंडल, मैं सभी दस्तावेजों से गुजरना नहीं चाहता हूं और डीबी का नाम निर्धारित करना चाहता हूं।

==== प्रयास # 2 ====

मेरे दूसरे प्रयास कड़ाई से दस्तावेज़ का पालन करने का था, और इसलिए मैं निम्नलिखित की कोशिश की:

doctrine_mongodb: 
    connections: 
     nxtlog_conn: 
      server: "%nxtlog_database_server%" 
      options: 
       username: "%nxtlog_database_username%" 
       password: "%nxtlog_database_password%" 
       connect: true 
       db: "%nxtlog_database_name%" 
     nxtsurvey_conn: 
      server: "%nxtsurvey_database_server%" 
      options: 
       username: "%nxtsurvey_database_username%" 
       password: "%nxtsurvey_database_password%" 
       connect: true 
       db: "%nxtsurvey_database_name%" 
    document_managers: 
     nxtlog_dm: 
      connection: nxtlog_conn 
      mappings: 
       NxtLogBundle: ~ 
     nxtsurvey_dm: 
      connection: nxtsurvey_conn 
      mappings: 
       NxtVibeSurveyBundle: ~ 

और मिल निम्नलिखित त्रुटि:

ServiceNotFoundException in CheckExceptionOnInvalidReferenceBehaviorPass.php line 58: 
The service "doctrine_mongodb.odm.nxtlog_conn_connection" has a dependency on a non-existent service "doctrine_mongodb.odm.nxtlog_conn_configuration". 

तो मुझे पता चला कि मेरे पास con के लिए अलग-अलग नाम नहीं हो सकते नीलामी और डेटा-प्रबंधकों। कौन मुझे विश्वास नहीं था, इसलिए मैं इसे googled, और किसी ने वही समस्या थी, और जवाब doctrine_mongodb के अंतर्गत निम्नलिखित जोड़ने के लिए किया गया था:

default_commit_options: ~ 

लेकिन यह समाधान मेरे लिए काम नहीं किया है, और अधिक Googling के बाद, मैंने पाया कि jmikola, जिसने बंडल (या इसके कुछ हिस्सों) लिखा था, ने गलती की, उसने कहा कि उसने इसे ठीक किया है, और डिफ़ॉल्ट_commit_options एक आवश्यक कॉन्फ़िगरेशन विकल्प नहीं होना चाहिए। (रेफरी https://github.com/doctrine/DoctrineMongoDBBundle/issues/222)

इस बिंदु पर मुझे कुछ मदद की आवश्यकता होगी, क्योंकि इसे हल करने में बहुत अधिक समय लग रहा है।

धन्यवाद

उत्तर

1

काफी कुछ समय पहले मैं भी सेटअप करने की कोशिश की कई सिद्धांत कनेक्शन, है, हालांकि मैं समय पर Zend फ्रेमवर्क (और संबंधित सिद्धांत मॉड्यूल) का इस्तेमाल किया। अगर मुझे सही याद है, तो आपको सभी नए नेमस्पेस के साथ सिद्धांत सेवाएं जोड़नी होंगी (आपके मामले में nxtlog_conn)।

मैंने source of the ZF2 DoctrineMongoODMModule की जांच की और यह अभी भी मुझे याद है कि: यदि आप कनेक्शन चाहते हैं, तो आपको एक ही नामस्थान के साथ एक सिद्धांत configuration service उपसर्ग करना होगा।

आपके त्रुटि संदेश से निर्णय लेने पर, यह सिम्फनी बंडल पर भी लागू होता है, हालांकि मुझे बंडल स्रोत कोड में ज़िम्मेदार स्थान नहीं मिला।

The service "doctrine_mongodb.odm.nxtlog_conn_connection" has a dependency on a non-existent service "doctrine_mongodb.odm.nxtlog_conn_configuration" .

यह मूलतः आपको बताता है: मैं एक कनेक्शन चाहते हैं, लेकिन एक दूसरे इंतजार, मैं इसी विन्यास नहीं मिल सकता है!

यह जानने का प्रयास करें कि orm_default कनेक्शन के लिए कॉन्फ़िगरेशन कैसे सेट किया गया है और अपनी कॉन्फ़िगरेशन को बुद्धिमानी से सेट अप करें। यदि आपको एक ही प्रारूप की एक और त्रुटि आती है, तो अगले आवश्यक सेवा नाम का शिकार करें और फिर कुल्लाएं और दोहराएं।

1

हम निश्चित रूप से सुनिश्चित करने की कोशिश नहीं करते हैं लेकिन आशा करते हैं कि इससे मदद मिलेगी। यहाँ गूगल समूह https://groups.google.com/d/msg/doctrine-user/6YCVAZ4h4nA/YrZNfSopmNUJ

doctrine_mongodb: 
    default_database: "%nxtlog_database_name%" 
    default_connection: nxtlog_conn 
    default_document_manager: nxtlog_conn 
    connections: 
     nxtlog_conn: 
      server: "%nxtlog_database_server%" 
      options: 
       username: "%nxtlog_database_username%" 
       password: "%nxtlog_database_password%" 
       connect: true 
       db: "%nxtlog_database_name%" 
     nxtsurvey_conn: 
      server: "%nxtsurvey_database_server%" 
      options: 
       username: "%nxtsurvey_database_username%" 
       password: "%nxtsurvey_database_password%" 
       connect: true 
       db: "%nxtsurvey_database_name%" 
    document_managers: 
     nxtlog_conn: 
      connection: nxtlog_conn 
      mappings: 
       NxtLogBundle: ~ 
     nxtsurvey_conn: 
      connection: nxtsurvey_conn 
      mappings: 
       NxtVibeSurveyBundle: ~ 
+0

है यही कारण है कि मैंने पहले, वास्तव में क्या कोशिश की है, सिवाय इसके कि मैं डिफ़ॉल्ट पैरामीटर नहीं करना चाहते से एक लिंक, मेरे मामले के लिए के रूप में यह पूरी तरह से बेकार हो सकता है। यदि मेरे पास 2 अलग-अलग डीबी का उपयोग करके 2 बंडल हैं, तो मैं डिफ़ॉल्ट डीबी या कनेक्शन का उपयोग क्यों करूंगा, क्योंकि दोनों बंडलों में एक पूरी तरह से अलग तर्क है, और एक-दूसरे पर निर्भर नहीं हैं। – nicom974

+0

हाँ मैं समझता हूं कि आप एक डिफ़ॉल्ट पैरामीटर नहीं चाहते हैं लेकिन आपको यह जानना है कि डिफ़ॉल्ट का मतलब यह नहीं है कि ओडीएम स्वचालित रूप से इसका उपयोग करेगा। आप वह हैं जो चुनते हैं कि आप किस कनेक्शन का उपयोग करते हैं। –

+0

अच्छी तरह से, यह वास्तव में किसी कारण से डिफ़ॉल्ट रूप से डिफ़ॉल्ट का चयन करता है। और अब तक, मुझे मिला एकमात्र तरीका एनोटेशन में डीबी नाम जोड़ना था, जो मेरे उपयोग के मामले के लिए एक अच्छा समाधान नहीं है। मैंने इसे xdebugged, और देखा कि कनेक्शन विकल्पों से डीबी वास्तव में लिया जा रहा था, लेकिन अंत में उपयोग नहीं किया गया था। मैं अभी तक क्यों पता लगाने में सक्षम नहीं हूं। – nicom974

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