मुझे सिम्फनी 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)
इस बिंदु पर मुझे कुछ मदद की आवश्यकता होगी, क्योंकि इसे हल करने में बहुत अधिक समय लग रहा है।
धन्यवाद
है यही कारण है कि मैंने पहले, वास्तव में क्या कोशिश की है, सिवाय इसके कि मैं डिफ़ॉल्ट पैरामीटर नहीं करना चाहते से एक लिंक, मेरे मामले के लिए के रूप में यह पूरी तरह से बेकार हो सकता है। यदि मेरे पास 2 अलग-अलग डीबी का उपयोग करके 2 बंडल हैं, तो मैं डिफ़ॉल्ट डीबी या कनेक्शन का उपयोग क्यों करूंगा, क्योंकि दोनों बंडलों में एक पूरी तरह से अलग तर्क है, और एक-दूसरे पर निर्भर नहीं हैं। – nicom974
हाँ मैं समझता हूं कि आप एक डिफ़ॉल्ट पैरामीटर नहीं चाहते हैं लेकिन आपको यह जानना है कि डिफ़ॉल्ट का मतलब यह नहीं है कि ओडीएम स्वचालित रूप से इसका उपयोग करेगा। आप वह हैं जो चुनते हैं कि आप किस कनेक्शन का उपयोग करते हैं। –
अच्छी तरह से, यह वास्तव में किसी कारण से डिफ़ॉल्ट रूप से डिफ़ॉल्ट का चयन करता है। और अब तक, मुझे मिला एकमात्र तरीका एनोटेशन में डीबी नाम जोड़ना था, जो मेरे उपयोग के मामले के लिए एक अच्छा समाधान नहीं है। मैंने इसे xdebugged, और देखा कि कनेक्शन विकल्पों से डीबी वास्तव में लिया जा रहा था, लेकिन अंत में उपयोग नहीं किया गया था। मैं अभी तक क्यों पता लगाने में सक्षम नहीं हूं। – nicom974