【发布时间】:2016-11-08 22:47:21
【问题描述】:
我最近从 Capistrano 2 切换到 Capistrano 3,发生了很多变化,我在尝试使新 Capistrano 适应我正在从事的项目中使用 Capistrano 2 所做的工作时遇到了一些麻烦.
我目前面临的最大问题是按角色过滤。我知道你可以做到:
ROLES=web,worker cap production deploy
但如果你有一个包含所有角色的服务器,那似乎真的什么都不做。
使用 Capistrano 2 我可以运行:
cap worker deploy
所有工作任务都会被应用。 Capistrano 2 具有在任务中指定的角色,如果未请求该角色,则跳过任务(在大多数情况下)。然而,Capistrano 3 似乎并非如此,过滤器在多服务器环境中非常有用,在这种环境中,每个角色都有特定的服务器。但是,如果服务器共享一个角色或者只有一个角色,那就有点奇怪了。在新的 Capistrano 任务中,似乎检查是否存在具有给定角色的主机,而不是根据角色检查任务是否应该运行。在我看来,ROLES 旨在限制服务器而不是任务。
所以我想知道这在 Capistrano 3 中是否可行。另一种查看方式是将任务分组到一个名称下。我想选择正在执行的任务组。
我可以通过一些修补来实现这一点,我可以检查 ROLES 是否存在并根据它跳过任务,我可以根据角色选择要加载的配方,我可以根据 ROLES var 动态附加任务,或者可能将任务分组到角色命名的文件中,并根据角色等进行动态加载,但也许我缺少一些东西。
有什么想法吗?
【问题讨论】:
标签: ruby deployment roles capistrano3