2008-09-27 15 views
8

एक आदर्श दुनिया में, हमारी विकास प्रक्रियाएं सही होंगी, जिसके परिणामस्वरूप नियमित रिलीज होते हैं जिन्हें इतनी अच्छी तरह से परीक्षण किया गया था कि किसी भी चल रहे एप्लिकेशन को "हॉटफिक्स" करना कभी भी आवश्यक नहीं होगा।तैनात अनुप्रयोगों को हॉटफिक्स करने की अनुमति देने के लिए कुछ अच्छी रणनीतियां क्या हैं?

लेकिन, दुर्भाग्यवश, हम असली दुनिया में रहते हैं, और कभी-कभी बग हमारे पीछे फिसल जाते हैं और जब तक हम अगली रिलीज में पहले ही व्यस्त नहीं हो जाते हैं, तब तक उनके बदसूरत सिर नहीं पीछे जाते हैं। और बग को अब तय करने की आवश्यकता है। अगली अनुसूचित रिलीज के हिस्से के रूप में नहीं। आज रात नहीं जब यातायात मर जाता है। अब

आप इस आवश्यकता से कैसे निपटते हैं? यह वास्तव में अच्छे डिजाइन प्रथाओं के प्रति काउंटर चला सकता है, जैसे कि आपके कोड को अच्छे, अलग वर्ग पुस्तकालयों में रीफैक्टर करना।

उत्पादन सर्वर पर हाथ-संपादन मार्कअप और संग्रहीत प्रक्रिया आपदा के लिए एक नुस्खा हो सकती है, लेकिन यह आपदा को भी रोक सकती है।

रखरखाव आवश्यकताओं और अच्छी कोडिंग प्रथाओं के बीच संतुलन खोजने के लिए एप्लिकेशन डिज़ाइन और तैनाती तकनीकों के लिए कुछ अच्छी रणनीतियां क्या हैं?

उत्तर

2

[इससे पहले कि हम जारी भले ही हम एक बहुत परीक्षण,] यह क्या हम करते हैं:

हमारे SVN इस तरह दिखता है:

/repo/trunk/ 
/repo/tags/1.1 
/repo/tags/1.2 
/repo/tags/1.3 

अब जब भी हम जारी है, हम एक टैग बनाने के जो हम अंत में उत्पादन में जांच करें। उत्पादन करने से पहले, हम स्टेजिंग करते हैं जो [कम सर्वर लेकिन] उत्पादन के समान ही है।

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

अब जब भी हम हॉटफिक्स एक मुद्दा करने की जरूरत है, हम इसे टैग में तय/एक्स पहली और फिर हम svn update टैग से और अच्छे हैं। कभी-कभी हम स्टेजिंग के माध्यम से जाते हैं, कुछ मुद्दों के साथ (जैसे वर्तनी की तरह मामूली/मामूली सुधार) हम बाय-पास स्टेजिंग करते हैं।

याद रखने की एकमात्र चीज tags/x से trunk तक सभी पैच लागू करना है।

यदि आपके पास एक से अधिक सर्वर हैं, तो Capistrano उन सभी परिचालनों को चलाने में बेहद सहायक है।

+0

आप विकास में सुधार का परीक्षण कैसे करते हैं? आम तौर पर एक देव बॉक्स पर मेरे पास मेरे ट्रंक फ़ोल्डर पर दस लाख चीजें हैं जिन्हें पुनः कॉन्फ़िगर करने की आवश्यकता है। साथ ही, जब आप रिलीज करते हैं तो नवीनतम संशोधन संख्या को ध्यान में रखते हुए एसवीएन टैग का क्या फायदा होता है? धन्यवाद! –

+0

अच्छा सवाल, मैंने अपना जवाब बढ़ाया और कहा कि हमारे पास एक स्टेजिंग वातावरण है। (आरई: अंतर) IMHO यह उपयोग-मामला है, एक संशोधन के साथ एक टैग के साथ काम करना आसान है और जैसा कि मैंने समझाया है, हम उत्पादन से पहले विशिष्ट जोड़ों को उत्पादन/स्टेजिंग करते हैं। उम्मीद है की वो मदद करदे। – Till

0

एक रणनीति विभिन्न घटकों के लिए घोषणात्मक-शैली बाहरी कॉन्फ़िगरेशन फ़ाइलों का भारी उपयोग करना है।

इस के उदाहरण: किसी तरह IBatis/IBatis.NET

  • लॉगिंग Spring/Spring.NET
  • जैसे उपकरण के माध्यम से JLog/ NLog
  • निर्भरता इंजेक्शन की तरह एक उपकरण के माध्यम से उपकरण के माध्यम से

    • डाटाबेस पहुँच/वस्तु-संबंधपरक मानचित्रण

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

  • 0

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

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

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