2009-09-30 9 views
13

इस मद से: What's best Drupal deployment strategy? .... मैं बोली:ड्रूपल डाटाबेस तैनाती रणनीतियों?

डेटाबेस जटिल काम कर रहे हैं; डीवी/स्टेजिंग डीबी को साफ करना और इसे लाइव करने के लिए धक्का देना शुरुआती रोलआउट के लिए सबसे आसान है, लेकिन अगर लाइव साइट पर उपयोगकर्ता भी सामग्री उत्पन्न कर रहे हैं तो वृद्धिशील डीबी अपडेट करते समय कुछ झुर्रियां होती हैं।

मुझे कुछ विचार करना है कि यह कैसे करें? वर्तमान में मुझे अपनी स्थानीय मशीन पर मौजूदा डीबी की पूरी प्रति मिलती है, उस सबवर्सन को प्रतिबद्ध करें, और उसके बाद पूरे डेटाबेस को तैनात करें। वर्तमान में फ़ाइल 15megs है, और हर बार मुझे पूरी फ़ाइल अपलोड करनी होती है (मुझे लगता है कि सबवर्सन इसे पूरी नई फाइल के रूप में देखता है, क्योंकि इसमें हर बार इतने सारे बदलाव होते हैं)।

तो, मेरे सवालों का वास्तव में कर रहे हैं:

  1. मैं कैसे जब (कम बार करने के अलावा अन्य) करने से मेरी Db आकार नीचे मिल सकता है?
  2. क्या मेरे डीबी और सर्वर डीबी को सिंक में रखने का कोई और तरीका है? विशेष रूप से यह मानते हुए कि उपयोगकर्ता हर समय नए डेटा पोस्ट करेंगे?

उत्तर

13

क्या मेरे डीबी और सर्वर डीबी को सिंक में रखने का कोई और तरीका है? विशेष रूप से यह मानते हुए कि उपयोगकर्ता हर समय नए डेटा पोस्ट करेंगे?

हमारे पास हर जगह एक बड़ी वितरित टीम और संपादकीय कर्मचारी हैं इसलिए डेटाबेस को तैनात करना संभव नहीं है।

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

मुद्दों, विशेष रूप से पार निर्भरता के साथ कर रहे हैं (यदि लोग एक से अधिक मॉड्यूल में अद्यतन कार्यों लिखना), और यह कुछ व्यवस्थापक में एक अपेक्षाकृत मामूली परिवर्तन है कि कोड करने के लिए समय ले सकते हैं। Install profile api इसमें मदद करता है।

उदाहरण

function mysite_update_6000() { 
    install_include(array('user')); 
    $editor_rid = install_add_role('editor'); 
    install_add_permissions(DRUPAL_ANONYMOUS_RID, array('do something')); 
    install_add_permissions($editor_rid, array('do something', 'administer nodes')); 
    return array(); 
} 

के लिए एक भूमिका जोड़ने और इसे करने के लिए कुछ अनुमतियों आवंटित करेगा। ऐसा करने से कोड में सभी परिवर्तन होते हैं ताकि आपको डेटाबेस माइग्रेट और सिंक्रनाइज़ करने की आवश्यकता न हो।

वहाँ भी है एक migration मॉड्यूल जो इस के साथ मदद कर सकता है, यह टेबल में परिवर्तन लॉग करता है और उन्हें एक अद्यतन कार्य करने के लिए बचाता है। यह drupal.org माइग्रेट मॉड्यूल के साथ उलझन में नहीं है जो सामग्री माइग्रेशन के लिए है।

हमें कुछ सफलता मिली है, लेकिन features मॉड्यूल के साथ कुछ समस्याएं भी हैं, जो माइग्रेटिंग सुविधाओं के साथ मदद कर सकती हैं।

+1

+1 - कस्टम अपडेट फ़ंक्शंस के लिए अनुमति देने के लिए 'डमी' मॉड्यूल का उपयोग करने का अच्छा विचार। –

+0

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

2

छोटी परियोजनाओं के लिए, हम अभी भी आपकी वर्तमान प्रक्रिया के समान कुछ करते हैं जिसमें हम लाइव उपयोगकर्ताओं को संपादन अधिकारों के साथ सभी उपयोगकर्ताओं को अवरुद्ध करके, डेटाबेस को डंप करने, इसे चरण चरण में अपलोड करने, सभी अपडेट करने के लिए केवल लॉक इंस्टेंस को लॉक करते हैं। हम वहाँ की जरूरत है और एक बार परिणामों से संतुष्ट हैं, हम चरण उदाहरण स्विच अगले लाइव संस्करण बन गया। लेकिन यहां तक ​​कि छोटे उदाहरणों के लिए यह दर्दनाक और एक अच्छे समाधान से बहुत दूर है।

दो बड़ी परियोजनाओं में, हम जेरेमी के समान नाव में हैं, जिसमें पूरा सेटअप पूर्ण डेटाबेस डंप को तैनात करने के लिए जटिल है, खासकर जब से हम केवल कुछ मोड पढ़ने के लिए उदाहरणों को लॉक करने का जोखिम नहीं उठा सकते हैं अद्यतन।

उन लोगों के लिए, हमने कुछ विस्तार के लिए Migraine का उपयोग किया है (this related discussion भी देखें)। यह एक ड्रूपल मॉड्यूल नहीं है बल्कि एक अजगर लिपि है जिसे हमने अपनी जरूरतों के लिए थोड़ा सा अनुकूलित किया है। इसका उद्देश्य कुछ संरचित डंप बनाना है, जो उपयोगकर्ताओं को आपूर्ति की गई सामग्री को अन्य सेटिंग्स से अलग करता है, इस प्रकार अधिक चुनिंदा अपडेट और स्टेजिंग रणनीतियों की अनुमति देता है। लेकिन इस दृष्टिकोण का उपयोग करते हुए कम या ज्यादा अराजक ड्रोपल डेटाबेस संरचना (विशेष रूप से रेफरेंशियल अखंडता प्रवर्तन की कमी) को देखते हुए, नए मॉड्यूल जोड़ते समय लगातार ट्विकिंग की आवश्यकता होती है और यह बहुत जोखिम भरा होता है, क्योंकि किसी को केवल सुसंगत सेट को डंप/अपडेट करने के लिए अतिरिक्त सुनिश्चित करने की आवश्यकता होती है टेबल।

हम अपने कस्टम मॉड्यूल के अपडेट फ़ंक्शंस का उपयोग करके 'थोक' डंप/अपडेट ऑपरेशंस की आवश्यकता को कम करने की कोशिश करते हैं और मुझे जेरेमी फ्रांसीसी को अन्य के लिए अपडेट फ़ंक्शंस जोड़ने की क्षमता के लिए 'डमी' मॉड्यूल जोड़ने का सुझाव पसंद है सेटिंग्स!

सब कुछ, ड्रोपल उदाहरणों को अद्यतन/माइग्रेट करना अभी एक बड़ा दर्द है और मुझे उम्मीद है कि भविष्य के संस्करणों में एक और सुसंगत समाधान होगा, हालांकि मैं देख सकता हूं कि सामान्यीकृत दृष्टिकोण के साथ आना मुश्किल है वर्तमान डेटाबेस स्कीमा और वहाँ व्यक्ति परिवर्धन के साथ कस्टम मॉड्यूल की राशि:/


पुनश्च: Backup and Migrate एक Drupal मॉड्यूल एक दृष्टिकोण माइग्रेन स्क्रिप्ट के समान लेने के लिए लगता है कि है, लेकिन मैं इसे इस्तेमाल नहीं किया है अभी तक।

2

हेनरिक और जेरेमी ने तैनाती की स्थिति पर उत्कृष्ट उत्तर दिए हैं। मैंने कैपिस्ट्रानो (रूबी) के अच्छे प्रभाव के लिए भी इस्तेमाल किया है। DrupalCampLA Case Study उनके द्वारा उपयोग की जाने वाली तैनाती तंत्र का वर्णन करता है (कैपिस्ट्रानो समेत), और डाउनलोड पैकेज में उनकी तैनाती स्क्रिप्ट शामिल है।

यदि आप अपने डेटाबेस डंप के आकार को कम करना चाहते हैं, तो कैश और वॉचडॉग टेबल को बाहर करने के लिए इसे तैयार करना सुनिश्चित करें। डिफ़ॉल्ट रूप से बैकअप और माइग्रेट का यूआई आपको दिखाता है कि कौन सी टेबल सोचती है वह अनदेखी करने योग्य है।

+0

+1 एक और विकल्प सुझाए जाने के लिए +1 - मैंने पहले कैपिस्ट्रानो के बारे में नहीं सुना था, लेकिन यह इसे देखने के लिए वादा करता/लगता है। –

1

ऐसा करने का सबसे अच्छा तरीका है कोड में अपने सभी परिवर्तनों को रखने और features module के रूप में उपकरण का उपयोग स्टेजिंग और/या उत्पादन में परिवर्तन को धक्का देने के लिए।

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

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