Я использую Capistrano для обработки моего развертывания, и у меня есть две различных роли в моей установке-: сеть и: обработка. У них обоих есть обычное: разверните задачи, но: задача перезапуска должна отличаться для двух типов сервера.
Таким образом, моя первая попытка была чем-то вроде этого:
task :restart, :roles => :web do
run "... web related restart stuff ..."
end
task :restart, :roles => :processing do
run "... processing related restart stuff ..."
end
Который не работает, потому что второе: перезапуск (для: обработка роли), заменяет первое: перезапуск (для: веб-роль), и: сеть: перезапуска никогда не происходит.
У меня был беглый взгляд вокруг, чтобы видеть, мог ли я написать условный код, в зависимости от которой роли (или ролей) сервер мог бы быть в том, когда задача выполняется, но нет рядом ни с какой документацией там для такой вещи. Какие-либо идеи?
Вы должны использовать пространства имен:
namespace :web do
desc "Restart web servers"
task :restart, :roles => :web do
# Restart Magic Here
end
end
namespace :process do
desc "Restart process servers"
task :restart, :roles => :process do
# Restart magic here
end
end
# Optionally:
task :restart do
web.restart
process.restart
end
Это то, что вы ищете, я думаю!
Также, чтобы использовать их в командной строке, вы должны использовать
$ cap <stage> # (if using multistage)
$ cap web:restart # Restarts web servers
$ cap process:restart # Restarts process servers
$ cap restart # Restarts both process and web servers
(Источник: я сопровождающий Capistrano.)