È necessario applicare una patch al codice Capistrano se si desidera che funzioni diversamente con i codici di uscita; è hardcoded per generare un'eccezione se lo stato di uscita non è zero.
Ecco la parte pertinente di lib/capistrano/command.rb. La linea che inizia con if (failed
... è quella importante. Fondamentalmente dice che se ci sono valori di ritorno diversi da zero, genera un errore.
# 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
fonte
2009-04-17 04:57:43
Non sono sicuro di cosa sia Capistano, ma ho trovato la mia strada qui a causa dello stesso problema con bash. E poi puoi usare "my_command || true" invece di "my_command; true" – Zitrax