5

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

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

मुझे यहां क्या याद आ रही है? ऐसा लगता है कि यह एक आम पैटर्न होना चाहिए।

+0

क्या आप नोट में सभी विवरण जोड़ सकते हैं "सभी एक ही समय में पुनरारंभ करें"? आप वास्तव में क्या मतलब था? –

उत्तर

0

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

चाल अपने तैनाती विन्यास में deploy:create_symlink कार्य ओवरराइड करने के लिए है:

def perform_task_offline options 
    sudo "take_this_server_offline", options 
    yield 
    sudo "put_this_server_online", options 
end 

def create_symlink_task options 
    # does what your existing deploy:create_symlink did, something like: 
    run "rm -f /web/current && ln -s #{release_path} /web/current", options 
end 

namespace :deploy do 

    task :create_symlink, {once: true, except: {no_release: true}} do 
    deployed_servers = Array.new 

    roles[:app].servers.each do |current_server| 
     options = {hosts: current_server} 
     deployed_servers.push current_server 
     perform_task_offline(options) { create_symlink_task options } 
    end 
    end 
end 

इस मामले perform_task_offline आदेशों सर्वर options में निर्दिष्ट स्थान पर निष्पादित कि यह लोड संतुलन से हटाने शामिल होता है, जबकि यह yield रों create_symlink_task सहित ब्लॉक, जो तैनाती symlink बनाता है।

आपको फिर मानक cap कमांड को चलाने के लिए चलाने में सक्षम होना चाहिए, और आप सर्वर को अनुक्रमिक रूप से ऑफ़लाइन जाने के लिए देखेंगे, "वर्तमान" सिम्लिंक बनाएं, फिर बैक अप लें।

ध्यान दें कि उपरोक्त कोड उन सर्वरों को ट्रैक करता है जिन्हें सफलतापूर्वक deployed_servers पर तैनात किया गया है। यदि आप एक सक्रिय विफल तैनाती रोलबैक करने में सक्षम होना चाहते हैं (यानी, परिनियोजन स्वयं के दौरान विफलता होती है) केवल उन सर्वरों पर जो पहले तैनात किए गए थे, आपको on_rollback do ब्लॉक के अंदर एक समान लूप की आवश्यकता होगी, लेकिन केवल deployed_servers पर।