Bạn sẽ cần vá mã Capistrano nếu bạn muốn nó làm những việc khác nhau với mã thoát; nó được mã hóa cứng để tăng ngoại lệ nếu trạng thái thoát không phải là số không.
Đây là phần có liên quan của lib/capistrano/command.rb. Dòng bắt đầu bằng if (failed
... là dòng quan trọng nhất. Về cơ bản nó nói rằng nếu có bất kỳ giá trị trả lại không phải là không, hãy nêu ra một lỗi.
# Processes the command in parallel on all specified hosts. If the command
# fails (non-zero return code) on any of the hosts, this will raise a
# Capistrano::CommandError.
def process!
loop do
break unless process_iteration { @channels.any? { |ch| !ch[:closed] } }
end
logger.trace "command finished" if logger
if (failed = @channels.select { |ch| ch[:status] != 0 }).any?
commands = failed.inject({}) { |map, ch| (map[ch[:command]] ||= []) << ch[:server]; map }
message = commands.map { |command, list| "#{command.inspect} on #{list.join(',')}" }.join("; ")
error = CommandError.new("failed: #{message}")
error.hosts = commands.values.flatten
raise error
end
self
end
Nguồn
2009-04-17 04:57:43
Không chắc chắn những gì capistano là nhưng tôi tìm thấy con đường của tôi ở đây do cùng một vấn đề với bash. Và sau đó bạn có thể sử dụng "my_command || true" thay vì "my_command; true" – Zitrax