2016-07-06 77 views
1

我已经从Capistrano 2切换到Capistrano 3最近,很多改变了,我有一些麻烦试图改变Capistrano 2在项目中使用Capistrano 2的新Capistrano我正在尝试。Capistrano 3角色特定的任务

我目前面临的最大问题是按角色过滤。我知道你可以这样做:

ROLES=web,worker cap production deploy 

,但如果你有所有角色的单个服务器,似乎什么也不做,真的。

随着Capistrano的2我可以运行:

cap worker deploy 

和所有工作任务将被应用。 Capistrano 2具有在任务中指定的角色,并且如果角色未被请求,则任务被跳过(在大多数情况下)。然而,对Capistrano 3来说似乎并不是这样,在多服务器环境中,每个角色都有特定的服务器时,过滤器非常棒。但是,如果服务器共享一个角色或者只有一个角色,它会变得有点奇怪。在新的Capistrano任务中,似乎要检查是否存在具有给定角色的主机,而不是根据角色检查任务是否应运行。在我看来,ROLES旨在限制服务器而不是任务。

所以我想知道这是否可能在Capistrano 3中。另一种查看方法是将名称下的任务分组。我想选择正在执行哪组任务。

我可以通过一些修补来达到这个目的,我可以检查ROLES是否存在,并根据它来跳过任务,我可以根据角色选择要加载的配方,我可以根据ROLES动态附加任务var,或者可能将任务分组到角色命名文件中,然后根据ROLES等进行动态加载,但也许有些东西我错过了。

有什么想法?

回答

0

在我看来,罗尔斯是用来限制服务器而不是任务。

是的,这是完全正确的。在Capistrano 3中,任务与角色无关。在任务中,命令可以在与特定角色匹配的服务器上执行。使用ROLES进行筛选时,可以限制运行命令的服务器,但不限制任务本身。

您可以限制任务的一种方法是定义您自己的调用所需任务的高级任务。

例如:

# In deploy.rb 
task "worker" do 
    invoke "task1" 
    invoke "task2" 
    # etc. 
end 

这定义了worker的任务,接着执行任务,它可以是任何你想要的特定列表。然后你可以运行:

cap production worker 

这将运行所有生产服务器上的这些工作相关的任务。

相关问题