Я создал несколько задач capistrano, которые мне нужно запустить в пределах определенных :app
ролей. Это то, что я до сих пор:Задачи Capistrano не выполняются в заданной области.
desc "Stop unicorn"
task :stop, :roles => :app do
logger.info "Stopping unicorn server(s).."
run "touch #{unicorn_pid}"
pid = capture("cat #{unicorn_pid}").to_i
run "kill -s QUIT #{pid}" if pid > 0
end
Насколько я знаю, это должно запустить заданные команды на серверах, указанных в :app
роли, не так ли? Но дело в том, что он выполняет команды на серверах в роли :db
.
Может ли кто-нибудь дать представление об этой проблеме? Или есть способ заставить Капистрано придерживаться флага :roles
?
Заранее спасибо
// Эмиль
Я изучил немного больше, и оказывается, что к тому моменту, когда он достигает этой задачи, массив 'servers' включает в себя * все * серверы из всех ролей (т. Е. Объединенных как' app', web' и 'db') - это ожидаемое поведение? –
И далее. Кажется, что команда захвата запускается на всех серверах, а затем команда kill на всех серверах. Это приводит к тому, что команда kill пытается убить идентификатор последнего сервера на всех серверах. Есть ли наилучшая практика для этого случая, когда я хочу запустить серию команд на определенном сервере, перед повторением в массиве серверов? –
как ваша среда-ролевая установка? – phoet