Недавно я писал о том, как сделать всплывающие уведомления об окончании работы rake-задач. После этого нововведения работать стало существенно приятнее, поэтому я решил развивать успех в это правлении и сделал такие же всплываюшие уведомления для Capistrano.
В отличии от rake, в Capistrano предусмотрена возможность создавать функционал, который подгружается при выполнении любых задач. Этот функционал необходимо размещать в файле .caprc в домашней папке пользователя, это обычный ruby-файл.
Кроме того, Capistrano предоставляет API для создания callback-ов, которые могут выполняться как для отдельных задач, так и для всех задач сразу:
1 2 3 4 5 6 7 8 9 10 11 | on :before do
# Выполнится перед каждой задачей
end
on :after, :only => "deploy" do
# Выполнится только после deploy
end
on :after, :except => "deploy:migrations" do
# Выполнится после каждой задачи, кроме deploy:migrations
end
|
Доступные callback-и:
:before– вызывается перед выполнением задачи:after– вызывается после выполнения задачи:start– вызывается перед началом выполнения задачи верхнего уровня (вызванной через консольную командуcap):finish– вызывается после окончания выполнения задачи верхнего уровня:load– вызывается после загрузки рецептов:exit– вызывается после окончания выполнения всех задач
Мне необходимо добавить уведомление об окончании выполнения всех запрошенных задач, для этого я должен “повесить” свой код на событие :exit. Код для .caprc в этом случае у меня будет выглядеть вот так:
1 2 3 4 5 6 7 | def notify(message, body, urgency, icon = :info)
system("notify-send --urgency=#{urgency} --icon=#{icon} '#{message}' '#{body}'")
end
on :exit do
notify('Capistrano Task: Finished', ARGV.join(' '), :low)
end
|
После завершения выполнения команды cap deploy я теперь получаю вот такое уведомление:

Очень удобно, на мой взгляд. Не хватает только информации о времени выполнения задач. Но это как-нибудь в следующий раз.