主机过滤
您可能会遇到只想部署到配置中定义的服务器子集的情况。例如,单个服务器或一组服务器可能出现故障,您只想重新部署到这些服务器,而无需部署到所有服务器。
您可以使用主机过滤器将 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