角色过滤

您可能遇到只希望部署到与单个角色匹配的服务器的情况。例如,您可能更改了 Web 角色的工作方式,但不想触发对数据库服务器的部署。

您可以使用角色过滤器将 Capistrano 任务限制为仅匹配给定角色或角色的服务器。

如果过滤器不匹配任何服务器,则不会执行任何操作。

如果您指定了一个过滤器,它将匹配具有该角色的任何服务器,并且它将对服务器拥有的每个角色运行所有任务。例如,如果您过滤具有web角色的服务器,并且服务器同时具有webdb角色,则将在其上执行webdb角色任务。

指定角色过滤器

有三种方法可以指定角色过滤器。

环境变量

如果设置了环境变量ROLES,Capistrano 将从中读取角色过滤器。您可以内联设置它

ROLES=app,web cap production deploy

通过逗号分隔来指定多个角色。

在配置中

您可以在部署配置中设置角色过滤器。例如,您可以在 config/deploy.rb 中设置以下内容。

set :filter, :roles => %w{app web}

请注意,使用此方法时,您需要将过滤器指定为数组,而不是用逗号分隔的角色列表。

请注意,键名 :role 也受支持。

在命令行中

与使用环境变量类似,您可以通过将角色过滤器指定为 cap 的命令行参数来设置它。

cap --roles=app,web production deploy

与环境变量方法一样,用逗号分隔多个角色。

使用正则表达式

由于角色名称是 Ruby 符号,因此它们可以合法地包含任何字符。但是,为了允许在一行上指定多个角色,我们使用逗号作为分隔符。

要使用角色过滤器的正则表达式,请用“/”开头和结尾。由于上述原因,这些正则表达式可能不包含逗号。

Fork me on GitHub