2010-06-01 8 views
9

हम अपने अपाचे दस्तावेज़ रूट को सिमलिंक पर इंगित करने का एक तरीका ढूंढ रहे हैं। ईजी। DocumentRoot/var/www/html/finalbuildअपाचे दस्तावेज़ सेट करें symlink (आसान तैनाती के लिए)

finalbuild कहीं की तरह/घर/उपयोगकर्ता एक फ़ोल्डर में इंगित करना चाहिए/build3

जब हम एक नए निर्माण के लिए/घर/उपयोगकर्ता के लिए कदम/build4 हम एक खोल उपयोग करना चाहते हैं स्क्रिप्ट जो इस नई निर्देशिका/घर/उपयोगकर्ता/build4 पर प्रतीकात्मक लिंक "finalebuild" को बदलती है और एक नया वेब अनुप्रयोग संस्करण स्थापित करने और थोड़ा जोखिम के साथ चलने के लिए अपर्याप्त पुन: प्रारंभ करते हैं।

इस सिम्लिंक को बनाने और शेल स्क्रिप्ट का उपयोग करके इस लिंक को बदलने का सबसे अच्छा तरीका क्या है?

+1

I मैं सोच रहा हूं "आरएम/var/www/html/finalbuild & ln -s/home/user/build4/var/www/html/finalbuild"। आपको अपाचे को पुनरारंभ करने की भी आवश्यकता नहीं हो सकती है। – barrycarter

+0

धन्यवाद, मैंने डॉक्रोट बदल दिया है और इसे एक सिम्लिंक पर इंगित किया है, लेकिन अपाचे को सुनने में प्रतीत नहीं होता है ... मैंने apache सफलतापूर्वक, किसी भी विचार को फिर से शुरू कर दिया है? – Jorre

+0

मैं भी इसके लिए एक जवाब खोजने की कोशिश कर रहा हूं। अपाचे सिर्फ मुझे 403 त्रुटि दे रहा है। अब तक कोई भाग्य नहीं है। संभवतः क्योंकि उत्पादन में ऐसा करने का बुरा अभ्यास है। बस इसे मेरे देव बॉक्स पर करना चाहते हैं। – nedned

उत्तर

3

मैंने सिम्लिंक को उत्पादन में apache DocumentRoot के रूप में उपयोग किया है, जिसमें कोई भी सुंदर पुनरारंभ आवश्यक नहीं है। सामान्य रूप से, विचार काम करना चाहिए। एक 403 त्रुटि शायद सिमलिंक बदलने से संबंधित एक त्रुटि त्रुटि इंगित करती है। एक अतिरिक्त शिकन जिसे आप जोड़ना चाहते हैं making the symlink switch atomic है इसलिए सिम्लिंक हमेशा मौजूद है। ऐसा कहने के लिए, किसी भी समय सिमलिंक एक पल के लिए भी नहीं है।

इस समस्या का समाधान एक नया सिम्लिंक बनाकर परिवर्तन को प्रभावित करना है और फिर पुराने सिम्लिंक पर इसका नाम बदलना है। यूनिक्स जैसी प्रणालियों पर, नामकरण एक परमाणु ऑपरेशन है, और इस प्रकार सिम्लिंक "परिवर्तन" परमाणु भी होगा। हाथ रखकर प्रक्रिया इस प्रकार है:

$ ln -s new current_tmp && mv -Tf current_tmp current 
+1

बस खुद को विरोधाभास करने के लिए, मुझे यह लिंक दिखाई देता है जो समस्याओं का अनुभव करता है: http://www.mikebrittain.com/blog/2009/05/12/case-against-using-symlinks-for-code-promotion/ – defmikekoh

7

हम एक समान सेटअप रोजगार Capistrano का उपयोग कर रहे हैं। हालांकि, हमने कुछ समस्याओं में भाग लिया है:

सेटअप पर स्विच करने के बाद, चीजें ठीक होने लगती हैं, लेकिन फिर हमने cap deploy चलाने के बाद इसे ध्यान में रखना शुरू किया, भले ही symlink को सिर की ओर इंगित किया गया हो संशोधन, ब्राउज़र कई पुराने रीफ्रेश और विभिन्न जीईटी पैरामीटर जोड़ने के बाद भी पुराने पेज दिखाएगा।

पहले, हमने सोचा था कि यह ब्राउज़र कैशिंग था, इसलिए विकास के लिए हमने HTTP शीर्षलेखों के माध्यम से ब्राउज़र कैशिंग अक्षम कर दिया, लेकिन इससे कुछ भी नहीं बदला। फिर मैंने यह सुनिश्चित करने के लिए जांच की कि हम पूर्ण-पृष्ठ कैशिंग सर्वर-पक्ष नहीं कर रहे थे, और हम नहीं थे। लेकिन मैंने तब देखा कि अगर मैंने संशोधित करने के लिए इस्तेमाल किए गए सिल्लिंक में एक फ़ाइल हटा दी है, तो हमें 404 मिलेंगे, इसलिए अपाचे नए पृष्ठों की सेवा कर रहा था, लेकिन यह अभी भी "पुराना सिम्लिंक" का पालन कर रहा था और पृष्ठों को सेवारत कर रहा था गलत निर्देशिका

यह साझा होस्टिंग पर है, इसलिए मैं अपाचे को पुनरारंभ करने में सक्षम नहीं था। इसलिए मैंने सिम्लिंक को हटाने और हर बार एक नया निर्माण करने की कोशिश की। यह कभी-कभी काम करने लग रहा था, लेकिन भरोसेमंद नहीं। यह संभवतः 25 ~ 50% समय काम करता था।

आखिरकार, मैंने पाया है कि अगर मैं:

  1. मौजूदा सिमलिंक हटाया (इसे हटाने या इसका नाम);
  2. एक पृष्ठ का अनुरोध किया, सिमलिंक हल लेकिन फिर

इसे करने के लिए docroot कारण होगा नई निर्देशिका के लिए एक नया सिमलिंक बनाई गई यह

  • (404 में जिसके परिणामस्वरूप) याद आ रही खोजने के लिए प्रयास करने के लिए अपाचे के कारण ज्यादातर समय सही ढंग से अद्यतन किया जाना चाहिए।हालांकि, यह भी सही नहीं है, और लगभग 2-5% समय, जब तैनाती स्क्रिप्ट पुराने सिम्लिंक का नाम बदलने के बाद एक पृष्ठ लाने के लिए wget चलाती है, तो यह 404 के बजाय पुराना पृष्ठ लौटाएगी।

    ऐसा लगता है जैसे अपाचे या तो फाइल सिस्टम को कैशिंग कर रहा है, या शायद mv कमांड ने केवल फाइल सिस्टम को स्मृति में बदल दिया है जबकि अपाचे डिस्क पर फाइल सिस्टम से पढ़ रहा था (वास्तव में कोई समझ नहीं आता है)। किसी भी मामले में, मैंने सिमलिंक परिवर्तनों के बाद sync चलाने के लिए किसी की सिफारिश की है, जिसे स्मृति पर सिंक्रनाइज़ेशन में डिस्क पर फाइल सिस्टम प्राप्त करना चाहिए, और शायद थोड़ी देर देरी wget को 404 लौटने में मदद करेगी।

  • +2

    अगर कोई समझता है इस व्यवहार के पीछे क्यों यह दस्तावेज करना अद्भुत होगा। – ThorSummoner

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