कैपिस्ट्रानो में तैनाती को क्रमबद्ध करने के लिए यह वास्तव में सीधा नहीं है, जो सर्वर के बीच अपने सभी कार्यों को समानांतर करना पसंद करता है। इस मुद्दे को पुन: स्थापित करने के लिए, ऐसा लगता है कि आपके पास कुछ हद तक सर्वर हैं और तैनाती को अद्यतन करने के लिए प्रत्येक को ऑफ़लाइन अनुक्रम में ले जाना चाहते हैं।
चाल अपने तैनाती विन्यास में 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
पर।
क्या आप नोट में सभी विवरण जोड़ सकते हैं "सभी एक ही समय में पुनरारंभ करें"? आप वास्तव में क्या मतलब था? –