我正在使用Capistrano来处理我的部署,我的设置有两个不同的角色:Web和:处理.他们都具有通常的部署任务,但是对于两种类型的服务器,重启任务需要不同.
所以我的第一次尝试是这样的:
task :restart,:roles => :web do run "... web related restart stuff ..." end task :restart,:roles => :processing do run "... processing related restart stuff ..." end
哪个不起作用,因为第二个:restart(for:processing role)替换第一个:restart(对于:web角色),而web:restart不会发生.
我快速浏览一下,看看是否可以根据服务器在运行任务时可能处于哪个角色(或角色)来编写条件代码,但是没有任何文档在那里.有任何想法吗?
解决方法
你应该使用命名空间:
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维护者.)