ruby – 如何在Capistrano中为不同的角色定义相同的任务?

我正在使用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维护者.)

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...