2010-04-01 9 views
33

हेरोकू को धक्का देने का एक बुरा पक्ष यह है कि मुझे अपने डीबी माइग्रेशन चलाने से पहले कोड (और सर्वर स्वचालित रूप से पुनरारंभ) को धक्का देना चाहिए।कोई भी डाउनटाइम

यह स्पष्ट रूप से नई टेबल/विशेषताओं के बिना नए कोड वाले वेबसाइट पर नेविगेट करने वाले उपयोगकर्ताओं पर कुछ 500 त्रुटियों का कारण बन सकता है: हेरोकू द्वारा प्रस्तावित समाधान रखरखाव मोड का उपयोग करना है, लेकिन मुझे अपना वेबपैड देने के बिना कोई रास्ता नहीं चाहिए हर बार चल रहा है!

क्या कोई तरीका है? Capistrano के साथ उदाहरण के लिए:

  • मैं काम करने के लिए पूरी तरह से
  • मैं नई निर्देशिका के लिए संकर जाति का उदाहरण swith जारी रखने के
  • मैं चलाने (पिछड़े) प्रवास और पुराने कोड एक नया निर्देशिका में तैनात करने के लिए तैयार करने और कोड सर्वर को पुनरारंभ करें

... और मेरे पास कोई डाउनटाइम नहीं है!

उत्तर

0

हेरोकू कैपिस्ट्रानो द्वारा तैनात नहीं कर सकता है। आप Heroku द्वारा जारी उपकरण द्वारा ब्लॉक कर रहे हैं।

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

यदि आप समस्या से बचने के लिए थोड़ा समाधान चाहते हैं तो दो सर्वर में संतुलन है। आपके माइग्रेशन के दौरान केवल पढ़ने के डेटाबेस के साथ। रखरखाव पृष्ठ से परहेज करते हुए आप अपने प्रवासन के दौरान इस उदाहरण पर स्विच कर सकते हैं। आपके प्रवासन के बाद आप अपने गुरु के पास वापस आते हैं।

+1

हाय शिंगारा, मुझे खेद है, लेकिन मैं आपसे सहमत नहीं हूं। मैं इसके लिए लोड संतुलन का उपयोग नहीं करना चाहता हूं: हेरोकू की महान विशेषताओं में से एक आवश्यकता के अनुसार "पारदर्शी" क्लाउड पावर है और मैं इस सुविधा का उपयोग करना चाहता हूं ... हेरोोकू में संतुलन लोड करने के लिए मुझे दो मिलना होगा अलग-अलग ऐप्स और केवल पढ़ने के लिए डीबी मेरे उपयोगकर्ताओं को समस्याएं पैदा कर सकता है। और कोई डाउनटाइम सिस्टम कभी असंभव नहीं है। मैं सही ढंग से सिस्टम को बिना डाउनटाइम के समझाया गया है। एक रेट्रो-संगत डीबी स्कीमा की संभावना के बिना बड़े बदलाव के मामले में मैं रखरखाव पृष्ठ का उपयोग कर सकता हूं: लेकिन यह मेरे सभी मामलों का 5% है ... – zetarun

+0

आप इस जवाब में वर्णित समस्या से बच सकते हैं CouchDB का उपयोग करके, उदाहरण के लिए। – iconoclast

5

प्रक्रिया में सुधार करने का एकमात्र तरीका यह है कि यह व्यक्ति क्या सुझाव देता है। यह अभी भी एक गर्म तैनाती परिदृश्य हालांकि नहीं है:

http://casperfabricius.com/site/2009/09/20/manage-and-rollback-heroku-deployments-capistrano-style/

एक बात मैं सुझाव है कि केवल पहले Heroku अप करने के लिए आपके माइग्रेशन धक्का और उन्हें चलाने से पहले आप अपने codebase धक्का है। यह माइग्रेशन को स्टैंडअलोन के रूप में करने और प्रत्येक बार मैन्युअल रूप से उन्हें धक्का देने के लिए लागू होगा (जो आदर्श नहीं है)। मुझे आश्चर्य है कि इस मुद्दे के लिए अब हेरोकू पर होस्ट किए गए सभी बड़े ऐप्स के साथ बेहतर समाधान नहीं है।

21

आप एक दूसरा हेरोकू ऐप सेट कर सकते हैं जो आपके प्राथमिक उत्पादन ऐप के समान डीबी को इंगित करता है और उत्पादन में बाधा डाले बिना आपके डीबी माइग्रेशन को चलाने के लिए द्वितीयक ऐप का उपयोग करता है (माना जाता है कि माइग्रेशन आपके ऐप के पिछले संस्करण को नहीं तोड़ते हैं) ।

चलो हेरोकू ऐप्स उत्पादन और स्टैगिंग पर कॉल करें।

आपका तैनाती अनुक्रम की तरह कुछ हो जाएगा: मचान पर

  1. तैनात नए कोड
    git push heroku staging
  2. को मचान भागो डेटाबेस माइग्रेशन (ठेस डाटाबेस अद्यतन करने के लिए)
    heroku run -a staging-app rake db:migrate
  3. पर नया कोड तैनात करें
    git push heroku production

मचान एप्लिकेशन के बाद से आप Heroku के नि: शुल्क स्तरीय पार करने के लिए की जरूरत नहीं होगी आप कुछ भी खर्च नहीं होगा और यह सेटअप करने के लिए स्वचालित रूप से आप के लिए यह करने के लिए एक रेक तैनाती स्क्रिप्ट बहुत तुच्छ होगा।

शुभकामनाएं!

+0

क्या आपके पास अभी भी चरण 3 के साथ थोड़ा सा डाउनटाइम होगा? – andrewrk

+0

मेरा मानना ​​है कि हेरोोकू आपके पुराने डायनोस को तब तक रखेगा जब तक कि नए स्लग का संकलन पूरा न हो जाए, इसलिए चरण 3 चलने पर आपकी साइट उपलब्ध रहनी चाहिए। मुझे लगता है कि कुछ क्षणिक डाउनटाइम हो सकता है जबकि हेरोकू पुराने रायनो से नए लोगों तक रूटिंग को काटता है लेकिन यह बहुत कम होना चाहिए। – jshkol

+2

मुझे यकीन नहीं है कि यह वास्तव में एक अच्छा विचार है कि आपका स्टेजिंग पर्यावरण आपके उत्पादन डीबी से जुड़ा हुआ है यदि आप वास्तव में इसे स्टेजिंग वातावरण के रूप में उपयोग कर रहे हैं। – Daniel

9

यदि आप एक ही ऐप के दो संस्करणों के साथ लाइव रहने में सक्षम हैं, तो हीरोोकू में अब एक प्रीबूट सुविधा है।

https://devcenter.heroku.com/articles/preboot

+0

सही लिंक अब है: https://devcenter.heroku.com/articles/preboot –

1

मैं पहली बार: कैसे कि इस मुद्दे से निपटने के लिए पर इस एक के लिए https://devcenter.heroku.com/articles/labs-preboot/

डेटाबेस माइग्रेशन के लिए के रूप में, कि लेख के लिंक: वे एक नई सुविधा बुलाया preboot कि पुराने लोगों को बाहर लेने से पहले नई dynos शुरू होता है माइग्रेशन प्रतिबद्ध करें, उन्हें चलाएं, फिर शेष कोड को दबाएं। इस तरह की एक फ़ाइल जोड़ें:

git commit -m 'added migration' -- db/migrate/2012-your-migration.rb