Nó không thực sự đơn giản để triển khai tuần tự hóa trong capistrano, thích song song tất cả các hoạt động của nó giữa các máy chủ. Để giải quyết vấn đề này, có vẻ như bạn có một số máy chủ và muốn thực hiện từng máy chủ ngoại tuyến để cập nhật triển khai.
Bí quyết là để ghi đè lên các nhiệm vụ deploy:create_symlink
trong cấu hình triển khai của bạn:
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
Trong trường hợp này perform_task_offline
bao gồm các lệnh thực thi trên máy chủ theo quy định tại options
đó loại bỏ nó ra khỏi cân bằng tải trong khi nó yield
s các khối bao gồm create_symlink_task
, tạo liên kết tượng trưng triển khai.
Sau đó, bạn có thể chạy lệnh cap
tiêu chuẩn để triển khai và bạn sẽ thấy các máy chủ liên tục chuyển sang ngoại tuyến, tạo liên kết tượng trưng "hiện tại", sau đó quay lại.
Lưu ý rằng mã trên theo dõi các máy chủ đã được triển khai thành công với deployed_servers
. Nếu bạn muốn có thể khôi phục triển khai không hoạt động không thành công (có nghĩa là sự cố xảy ra trong khi tự triển khai) trên các máy chủ đã được triển khai trước đó, bạn sẽ cần một vòng lặp tương tự bên trong khối on_rollback do
, nhưng chỉ trên số deployed_servers
.
Bạn có thể thêm các chi tiết khác trong ghi chú "tất cả khởi động lại cùng một lúc" không? Chính xác bạn có ý gì ở đây? –