2010-03-12 16 views
8

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

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

मुझे आश्चर्य है कि किसी के पास कोई कामकाज या वैकल्पिक दृष्टिकोण है जिसके बारे में मैंने सोचा नहीं है। वर्तमान में मेरे विचार हैं:

  1. बस प्रत्येक फ़ाइल को तब तक पुनः प्रयास करें जब तक यह काम न करे। यह थोड़े समय के लिए त्रुटियों का कारण बन जाएगा क्योंकि वास्तव में यह अच्छा नहीं है।
  2. नए फ़ोल्डर में तैनात करें और नए फ़ोल्डर में आईआईएस के वेबूट को अपडेट करें। मुझे यकीन नहीं है कि एप्लिकेशन को व्यवस्थापक के रूप में चलाने और बैच फ़ाइलों को चलाने के लिए यह कैसे छोटा करें, जो बहुत ही बेकार है।

क्या किसी को पता है कि ऐसा करने का सबसे अच्छा तरीका क्या है, या यदि उपयोगकर्ता को व्यवस्थापक पहुंच के बिना # 2 करना संभव है, तो इसे विशेष एक्सेस देने के लिए तैयार होना चाहिए, लेकिन मैं चाहता हूं व्यवस्थापक से कम करना पसंद करते हैं)?

संपादित
बुनियादी ढांचे के स्पष्टीकरण ... हम एक NLB में 2 आईआईएस 7 वेबसर्वर को एक साझा NAS से अपने webroots चल (अधिक स्पष्ट रूप से, वे NAS पर ठीक उसी webroot का उपयोग कर रहे हैं)। हम उस बिंदु पर बहुत से तैनाती करते हैं, जहां कोई दृष्टिकोण हम वास्तव में स्वचालित नहीं कर सकते हैं वह व्यवहार्य नहीं होगा।

+4

हम स्टैक ओवरफ़्लो को तैनात करते समय भी काफी बार इसमें भागते हैं; ऐसा लगता है कि आईआईएस 7 उन फाइलों पर क्षणिक ताले रखेगा जो यह सेवा कर रहे हैं और यह फाइल आधारित रूसी रूले की तरह है। –

+0

फ़जहम - आपको इस तथ्य के बारे में अपने प्रश्न में एक नोट जोड़ना चाहिए कि आपके पास एक वेब फार्म है जहां दोनों सर्वर NAS से अपना कोड साझा करते हैं - क्योंकि इसका सुझावों पर एक बड़ा प्रभाव होगा - जो आमतौर पर फ़्रांसी के उत्तर का संयोजन होगा या क्रिस ने उस जवाब पर टिप्पणी की। –

+0

अरे, मैंने नोट जोड़ा है लेकिन मुझे कोई कारण नहीं दिख रहा है कि यह फ्रांसी के सुझाव को प्रभावित करेगा। माना जाता है कि यह क्रिस को प्रभावित करता है, लेकिन यह हमारे लिए आम तौर पर किए जाने वाले तैनाती की संख्या के कारण एक व्यवहार्य दृष्टिकोण नहीं है (जिसे मैं भी ध्यान में रखूंगा)। – fyjham

उत्तर

12

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

एएसपी.नेट में feature that targets exactly this scenario है। असल में, यह आपके वेबपैड की जड़ में अस्थायी रूप से App_Offline.htm नाम की एक फ़ाइल बनाने के लिए उबलता है। एक बार फ़ाइल होने के बाद, आईआईएस आपके ऐप के लिए कार्यकर्ता प्रक्रिया को हटा देगा और उपयोग में आने वाली किसी भी फाइल को उतार देगा। एक बार जब आप अपनी फ़ाइलें पर कॉपी, आप App_Offline.htm फ़ाइल को नष्ट कर सकते हैं और आईआईएस खुशी से फिर से मंथन शुरू कर देंगे।

ध्यान दें कि जब उस फ़ाइल नहीं है, आईआईएस अपने webapp करने के लिए किसी भी अनुरोध के लिए एक प्रतिक्रिया के रूप में अपनी सामग्री में काम करेगा। तो सावधान रहें कि आपने फाइल में क्या रखा है। :-)

+0

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

+6

इन पंक्तियों के साथ, हमारे पास खेत में कई वेब सर्वर हैं और अपडेट के लिए उन्हें अलग-अलग छोड़ दें। प्रक्रिया है: 1. खेत से सर्वर खींचें, 2. इसे कोड अपडेट करें, 3. iisreset चलाएं, 4. इसे वापस रोटेशन में रखें, 5. अगले सर्वर पर जाएं। – NotMe

+0

दिलचस्प विचार है, लेकिन हमारे पास केवल दो वेबसर्वर हैं और वे दोनों अपने वेबूट के लिए साझा NAS चलाते हैं (प्रदर्शन की बजाय रिडंडेंसी - NAS भी अनावश्यक है), इसलिए फ़ाइलों को दोनों वेबसर्वर द्वारा उपयोग में लाया जाता है। इसके अलावा हम जिन साइटों को तैनात करते हैं, उनमें से 20 (पिछले हफ्ते में 20 - हालांकि उनमें से केवल 1 वास्तव में इस मुद्दे को पाने के लिए पर्याप्त ट्रैफिक लेता है) यह एक उपकरण के बिना एक विशाल ओवरहेड होगा जो प्रक्रिया को प्रबंधित करता है। – fyjham

0

आप फ़ाइलों की प्रतिलिपि बनाने का प्रयास करने से पहले रूट फ़ोल्डर में web.config के टाइमस्टैम्प को संशोधित करने का भी प्रयास कर सकते हैं। यह एप्लिकेशन और मुफ्त उपयोग की गई फ़ाइलों को अनलोड करेगा।

+0

अभी भी कॉपी प्रक्रिया और आईआईएस कार्यकर्ता प्रक्रिया को रीसाइक्लिंग के बीच दौड़ की स्थिति है। तो हाँ, यह काम कर सकता है, लेकिन यह भी नहीं हो सकता है। –

+0

मैंने सोचा होगा कि यदि कोई नया अनुरोध आया है तो उसे फ़ाइलों तक पहुंचने की अधिक संभावना होगी क्योंकि इसे सबकुछ फिर से लोड करना होगा? जब तक कि यह अगले अनुरोध से पहले घूमने के आसपास सट्टेबाजी नहीं कर लेता है, और यदि ऐसा है तो मैं वास्तव में ऐसा नहीं सोचता कि उन साइटों पर संभव है जिनके बारे में मैं बात कर रहा हूं। विशेष रूप से एपीआई चलाता है जो अक्सर हिट हो जाता है। – fyjham

0

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

कोशिश अन्य सेवाओं है कि आपकी फ़ाइलों को ताला लगा हो सकता है नीचे बंद।आम सेवाओं के कुछ उदाहरण तो बस यही काम है कि:

  • Windows खोज
  • गूगल डेस्कटॉप खोज
  • विंडोज बैकअप
  • किसी अन्य एंटी-वायरस या अनुक्रमण सॉफ्टवेयर
+0

हाय, यह एक सेवर पर चल रहा है। हमारे पास एंटी-वायरस के अलावा अन्य सामान नहीं हैं, और मैंने पहले ही पुष्टि की है कि यह आईआईएस है जो फ़ाइलों को ताले रखती है। प्रश्न में फाइलें आम तौर पर डीएलएल और डीएलएल प्रश्नों में बदलाव करती हैं, और मुझे कोई कारण नहीं दिखता कि कोई भी डीएलएल के लिए स्पष्ट फ़ाइल हैंडल खोलने वाला कोई कारण नहीं देख सकता है (अगर यह छवियां या टेक्स्ट फाइलें थीं या कुछ ऐसा मैं देख सकता हूं, लेकिन डीएलएल यह असंभव लगता है)। – fyjham

2

एक अन्य समाधान आईआईएस है प्रोग्रामेटिक प्रशासन।

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

हालांकि यह कुछ अनुमति ट्यूनिंग की आवश्यकता है ...

आप आईआईएस 7.

के लिए आईआईएस 6 या Microsoft.Web.Administration के लिए ADSI या WMI के माध्यम से यह कर सकते हैं अपने 2. के बारे में, कि ध्यान दें WMI एडीएसआई के रूप में व्यवस्थापक विशेषाधिकारों की आवश्यकता नहीं है। आप वस्तुओं द्वारा अधिकारों को कॉन्फ़िगर कर सकते हैं। अपने डब्ल्यूएमआई कंसोल (एमएमसी) की जांच करें।

1

आप पहले से ही 2 वेब सर्वर के बीच संतुलन के बाद से कर रहे हैं लोड, आप कर सकते हैं:

  1. लोड संतुलन में, वेब सर्वर एक ऑफ़लाइन ले, इसलिए केवल वेब सर्वर बी उपयोग में है।
  2. वेब सर्वर ए के लिए अद्यतन साइट तैनात
  3. (एक बोनस के रूप में, आप वेब सर्वर एक पर एक अतिरिक्त परीक्षा पास पहले ही उसे में चला जाता है कर सकते हैं।)
  4. लोड संतुलन में, बी ऑफ़लाइन लेने के लिए और एक ऑनलाइन डालें, इसलिए केवल वेब सर्वर ए उपयोग में है।
  5. वेब सर्वर बी के लिए अद्यतन साइट
  6. (एक बोनस के रूप में, आप वेब सर्वर बी पर एक अतिरिक्त परीक्षा पास पहले ही उसे में चला जाता है कर सकते हैं।)
  7. लोड संतुलन में, बी वापस रख ऑनलाइन तैनात । अब दोनों वेब सर्वर अपग्रेड किए गए हैं और उत्पादन में उपयोग में वापस आ गए हैं।
  8. सूची आइटम
+0

अरे, मैंने अपने प्रश्न को थोड़ा और स्पष्ट किया है, जब मैंने कहा कि उन्होंने एक साझा NAS का उपयोग किया था, जिसका मतलब था कि उनके पास एक ही वेबूटॉट था (मतलब अगर हम 1 वेबसर्वर बंद कर देते हैं तो दूसरा अभी भी इसकी फाइलों का उपयोग करेगा)। इसके अलावा जब तक इस प्रक्रिया को स्वचालित करने का कोई तरीका नहीं है, यह अभी भी वास्तव में व्यवहार्य नहीं है (हम एक हफ्ते में 20 वेबसाइट तैनाती करते हैं - पाठ्यक्रम की एक ही साइट के नहीं - और जब तक यह अनिवार्य नहीं है तब तक यह ओवरहेड का बहुत अधिक है)। इसे एक अप-वोट दिया गया क्योंकि यह एक बहुत अच्छा जवाब है, यह सिर्फ हमारे सेटअप की विशिष्टता है जो इसे काम नहीं करता है। – fyjham

+0

मैं देखता हूं। NAS पर वेब एप्लिकेशन फ़ाइलों को होस्ट करने के लिए आपका तर्क क्या है? –

0

हम एक ही सर्वर (2003) और एक ही समस्या थी। कुछ डीएल को लॉक किया जा रहा था और वेबसाइट रूट में App_Offline.htm डालने के लिए जैक ने हमारे लिए डैड किया था।

समाधान:

फाइल अनुमति!

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

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

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