2011-01-25 25 views
34

Chúng tôi đang sử dụng Capistrano/Webistrano (với đá quý không có triển khai của Lee Hambley) để đẩy ứng dụng PHP của chúng tôi đến các máy chủ sản xuất. Tôi có một số nhiệm vụ tùy chỉnh chạy trong các phần khác nhau của quá trình triển khai.Làm thế nào để có Capistrano KHÔNG rollback nếu một nhiệm vụ không

Ví dụ: tôi có các tác vụ cố gắng dừng và khởi động lại một bản sao cầu nối. Tuy nhiên, đôi khi bit này không thành công trong quá trình triển khai, vì vậy Capistrano cuộn lùi toàn bộ triển khai và hoàn nguyên về bản sửa đổi trước đó. Đây là một nỗi đau. :-)

Tôi muốn nói với Capistrano bỏ qua kết quả trả về của các tác vụ này, vì vậy nếu chúng không thành công, Capistrano sẽ tiếp tục theo cách của nó và hoàn tất triển khai. Nó rất dễ dàng cho tôi để ssh đến máy chủ sau khi thực tế và đúng cách giết và khởi động lại dụ solr, hơn là phải làm một triển khai hoàn toàn một lần nữa.

Dưới đây là một số bộ phận có liên quan của các kịch bản triển khai:

before "deploy:symlink", :solr_kill 
after "deploy:symlink", :solr_start, :solr_index 

task :solr_kill do 
    run "cd #{current_path}/Base ; #{sudo} phing solr-kill" 
end 

task :solr_start do 
    run "cd #{current_path}/Base ; #{sudo} phing solr-start" 
    run "sleep 10" 
end 

task :solr_index do 
    run "#{sudo} #{current_path}/Base/Bin/app.php cron run solr_index_cron" 
end 

Trả lời

32

từ Capistrano Task docs có một cấu hình bạn có thể thêm vào nếu có một lỗi, để tiếp tục.

task :solr_start, :on_error => :continue do 
    # your code here 
end 

Chỉ cần thêm điều đó vào mỗi tác vụ bạn muốn bỏ qua lỗi và tiếp tục. Mặc dù, điều tốt nhất có thể là để xem liệu bạn có thể tìm ra nguyên nhân gây ra lỗi hay không và lệnh khởi động lại mạnh mẽ hơn để thực sự khởi động lại nó. Tôi chỉ nói điều này, kể từ khi bạn cố gắng để tắt kịch bản cho người khác, họ có thể không biết chính xác làm thế nào để nói nếu nó khởi động lại chính xác.

+0

Cảm ơn, Chris. Nhiệm vụ của tôi là mãi mãi một công việc đang diễn ra, nhưng điều này sẽ giúp cho đến khi tôi có cơ hội từ từ cải thiện chúng để xử lý lỗi tốt hơn. – TravellingGuy

+7

Có cách nào khác để làm điều này không? Điều gì xảy ra nếu bạn muốn dừng lỗi và kiểm tra trạng thái? –

+31

Cách kiểm tra trạng thái: chạy 'cap -d deploy'. -d là để "gỡ rối" có nghĩa là Capistrano sẽ tạm dừng trước khi thực hiện từng tác vụ và yêu cầu bạn tiếp tục hoặc hủy bỏ. Khi bạn nhận được lệnh mà bạn muốn gỡ lỗi đơn giản là không trả lời lời nhắc, hãy mở một tab/cửa sổ đầu cuối mới và SSH đến máy chủ triển khai của bạn và thực hiện gỡ lỗi của bạn :) – Bendihossan

Các vấn đề liên quan