主机过滤

您可能会遇到只想部署到配置中定义的服务器子集的情况。例如,单个服务器或一组服务器可能出现故障,您只想重新部署到这些服务器,而无需部署到所有服务器。

您可以使用主机过滤器将 Capistrano 任务限制为仅匹配给定主机名集的服务器。

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

如果您指定过滤器,它将匹配具有列出主机名的服务器,并且它将运行所有每个服务器的角色。换句话说,它只影响任务运行的服务器,而不是在服务器上运行的任务。

指定主机过滤器

有三种方法可以指定主机过滤器。

环境变量

如果设置了环境变量HOSTS,Capistrano 将从该环境变量读取主机过滤器。您可以内联设置它

HOSTS=server1,server2 cap production deploy

通过逗号分隔多个主机。

在配置中

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

set :filter, :hosts => %w{server1 server2}

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

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

在命令行中

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

cap --hosts=server1,server2 production deploy

与环境变量方法一样,通过逗号分隔多个服务器。

使用正则表达式

如果过滤器中的主机名与 DNS 名称的有效字符集不匹配(由正则表达式 /^[-A-Za-z0-9.]+$/ 给出),则假定它是在标准 Ruby 语法中的正则表达式。

例如,如果您有三个名为 localrubyserver1、localrubyserver2 和 amazonrubyserver1 的服务器,但只想部署到 localrubyserver*,您可以使用正则表达式调用 Capistrano

cap --hosts=^localrubyserver production deploy
Fork me on GitHub