एक मंचित वातावरण में एक मॉड्यूल को सही ढंग से कैसे निकालना है?


17

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

इसलिए, उन्हें उस मॉड्यूल के बिना नहीं चलाया जा सकता है। तो यहाँ हमारे वर्तमान कदम हैं। मेरा सवाल है: क्या यह सरल और अधिक प्रभावी ढंग से किया जा सकता है? कहो मैं foo_bar मॉड्यूल निकालता हूं।

  1. RCS में, एक नया रिलीज़ तैयार करें, जहाँ:
    • सभी css और थीम-ओवरराइड जो शीर्ष पर foo_bar का उपयोग या निर्माण करते हैं, हटा दिए जाते हैं।
    • Foo_bar के आधार पर मॉड्यूल के लिए सभी सीएसएस और थीम-ओवरराइड हटा दिए जाते हैं।
  2. स्वीकार करने के लिए जारी करें धक्का। उत्पादन डेटाबेस की हाल ही की प्रतिलिपि के साथ de modulesnstallation (व्यवस्थापक / मॉड्यूल से) का परीक्षण करें।
  3. यदि सब कुछ ठीक हो जाता है, तो उत्पादन के लिए नए कोडबेस को तैनात करें, और destnstall foo_bar और इसकी निर्भरताएं। यह विभिन्न मॉड्यूल में स्थापना रद्द करेगा, डेटाबेस की सफाई करेगा।
  4. आरसीएस (गिट) में, एक नया रिलीज तैयार करें जहां कोड वास्तव में हटा दिया गया है।
  5. यह स्वीकार करने के लिए कि जहां हम परीक्षण करते हैं, अगर गलती से इस पर निर्भर नहीं होता है (कुछ बदसूरत मॉड्यूल या थीम फ़ंक्शन में अन्य मॉड्यूल से फ़ाइलें सीधे शामिल हैं। सबसे विशेष रूप से CSS, JS या छवि-फ़ाइलें)।
  6. यदि स्वीकार किया जाता है, तो उत्पादन के लिए नई रिलीज को तैनात करें। उत्पादन में अब एक स्वच्छ डेटाबेस और एक स्वच्छ कोडबेस है

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

यदि हम पहली पुनरावृत्ति में कोडबेस से मॉड्यूल को हटाते हैं, तो हम डेटाबेस में कई लिंट को रखते हुए अनइंस्टॉल हुक नहीं चला सकते हैं; न केवल कुछ टेबल, बल्कि ज्यादातर चर और स्थान। यदि हम कोडबेस से मॉड्यूल को नहीं हटाते हैं, तो इसका मतलब है कि कोडबेस बासी, अप्रयुक्त कोड के साथ बढ़ेगा; यह कोई प्रदर्शन ओवरहेड नहीं देता है, लेकिन कोड को कठिन और कठिन बनाए रखता है।

आप इस के साथ कैसे पेश आएंगे?

[संपादित करें: तैनाती के बारे में जोड़ा गया नोट एक कठिन प्रक्रिया है, अक्सर]


2
यदि आप स्टैगिंग सर्वर पर पहले चरण 1 - 6 करते हैं, तो क्या तब आप लाइव साइट को HEAD ^ में अपडेट नहीं कर सकते हैं, अनइंस्टॉल कर सकते हैं, फिर HEAD (सभी में एक बैठे) को अपडेट करें?
एंडी

यदि मेरी सभी परियोजनाएं लागू की गईं, तो हां। लेकिन कुछ तारकोल को इधर-उधर करने की आवश्यकता होती है, जबकि अन्य उपयोग करते हैं (केवल!) Ftp और इतने पर। लेकिन git और कुछ git-hook-script में देखना निश्चित रूप से एक बहुत ही दिलचस्प विचार है।
Berkes

साइट को नीचे ले जाना वास्तव में क्यों आवश्यक है?
२.०१ बजे लेटेरियन

@Letharion: 1) उस डेटाबेस को बदलने की प्रक्रिया के दौरान अवांछित साइट से साइट को नीचे ले जाना आपके राइट्स पर प्रतिबंध लगाता है; Drupal लेनदेन का उपयोग नहीं करता है। 2) नए कोड को नियुक्त करना जो कुछ डेटाबेस स्टेट पर निर्भर करता है (एक थीम जिसके लिए एक निश्चित cc-field, जैसे की आवश्यकता होती है) आपकी साइट को रोल आउट कोड और डेटाबेस को अपडेट करने के बीच के समय में तोड़ देगा।
Berkes

जवाबों:


7

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

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

निम्नलिखित समायोजन के साथ अपने प्रश्न में उल्लिखित उसी प्रक्रिया का पालन करना जारी रखें:

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

ख। जब परीक्षण पूरा हो जाता है और स्वीकार किया जाता है, तो अवस्था (यांग) पर कोड को लाइव (यिंग) की स्थिति में पुनर्स्थापित करें।

सी। सिस्टम पर सामग्री बदलने के लिए किसी भी उपयोगकर्ता की क्षमता को अक्षम करके अपडेट के लिए लाइव (यिंग) साइट तैयार करें। अनुमति तालिका के लिए एक sql अद्यतन आमतौर पर यहाँ होगा। इस बिंदु पर, उपयोगकर्ता अभी भी लाइव साइट पर सामग्री को पढ़ सकेंगे, लेकिन यदि वे सामग्री को अपडेट करने का प्रयास करते हैं तो अनुमति अस्वीकृत त्रुटि प्राप्त होगी। (यदि आप शांत हैं, तो शायद आप किसी उचित सूचना को प्रिंट करने के लिए अस्वीकृत अस्वीकृत हैंडलर को बदल सकते हैं कि फ़ंक्शन अस्थायी रूप से अनुपलब्ध है)।

घ। अब अपडेट से अनुमति तालिका को छोड़कर, लाइव (यिंग) डेटाबेस को स्टेज (यांग) डेटाबेस पर वापस धकेलें।

इ। दोहराएँ कदम एक। फिर। यदि आपके पास अपने हैशटैग हैं, तो उस राज्य को पुनर्स्थापित करना आसान होना चाहिए, जहां से हटाए जाने वाले मॉड्यूल मौजूद हैं, डेटाबेस पर अनइंस्टॉल हुक चलाएं, और फिर उस कोड की स्थिति पर वापस जाएं जहां चरण 1 से आपकी आइटम मर्ज किए गए हैं पीठ में।

च। अब आप यिंग और यांग को स्वैप करने के लिए तैयार हैं। अपने अपाचे कॉन्फ़िगरेशन निर्देशों को समायोजित करके ऐसा करें। ध्यान दें कि यदि आप एक करते हैं /etc/init.d/apache restart, तो कुछ कनेक्शन गिराए जा सकते हैं, लेकिन /etc/init.d/apache reloadएक स्वच्छ स्वैप के लिए अनुमति देगा।

जी। लाइव अब 'यांग' है; अनुमतियाँ तालिका यहां अनमॉडिफ़ाइड है, जिससे उपयोगकर्ता सामग्री बना सकते हैं। यदि आप चरणों को स्वचालित करते हैं ई। और f।, अनुपलब्ध समय बहुत कम होना चाहिए।

एच। पुश लाइव (यांग) को वापस स्टेज (यिंग) में, कोड और डेटाबेस - या देव से पुश, आवश्यकतानुसार। अब आपके पास अपनी अगली यात्रा के लिए एक स्वच्छ वातावरण तैयार है।


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

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

आप mysql बाइनरी लॉग का उपयोग करके संक्रमण साइट पर लेनदेन का ट्रैक रखने पर विचार कर सकते हैं। Dev.mysql.com/doc/refman/5.0/en/point-in-time-recovery.html देखें । मैं केवल चीजों को एक साथ मिलाने के लिए खुद को अनिच्छुक होगा, लेकिन आप अतिरिक्त काउंटर / वॉचडॉग संदेशों का पता लगा सकते हैं। सत्र तालिका से निपटने का सबसे आसान तरीका संक्रमण के दौरान लॉगिन को भी अक्षम करना होगा।
greg_1_anderson

आपकी टिप्पणी ने मुझे एक अन्य संभावित समाधान में लाया: एक विशेष purposed मॉड्यूल के hook_update_n () के रूप में एक मॉड्यूल के लिए सभी hook_uninstall को एकत्रित करें: uninstall.module। इस तरह मैं पहले पुनरावृत्ति में कोडबेस को हटा सकता / सकती हूं और / या वास्तविक रिलीज में बहुत तेजी से विचलन पा सकती हूं। इस जानकारी को स्क्रैप करने वाली एक ड्रश-स्क्रिप्ट हो सकती है।
20

1
एक और बात जो थोड़ी मदद करेगी। अपने सभी कस्टम php कोड को ऐसे बदलें कि मॉड्यूल-से-हटाए जाने वाले किसी भी संदर्भ को इसमें लपेट दिया जाए if (module_exists('removeme')) { ... }। उस कोड को तैनात करें। यदि आप परीक्षण करते हैं और पुष्टि करते हैं कि मॉड्यूल को हटाने से अब आपका कस्टम कोड नहीं टूटेगा, तो यह आपकी तैनाती को सरल करेगा। ऐसी साइट पर अक्षम कदम रखना अभी भी उचित है जो लाइव नहीं है, लेकिन शायद यह आपकी खिड़की को थोड़ा संकीर्ण कर देगा। मुझे नहीं लगता है कि आपका कस्टम अपडेट हुक लाइव मॉड्यूल को अक्षम करने के लिए इसे किसी भी सुरक्षित बना देगा।
greg_1_anderson 19
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.