过滤
过滤是指将阶段文件中声明的整个服务器集缩减为更小的集合。Capistrano 中使用三种类型的过滤器(主机、角色和属性),它们在生效方式上存在很大差异,因为服务器、角色和属性的声明在任务中被用于两种截然不同的用途。
-
确定配置:通常使用
roles()
、release_roles()
和primary()
方法。通常这些方法在on()
方法的作用域之外使用。 -
使用
on()
方法与远程主机交互
例如,可以使用 roles(:kdc)
返回的服务器列表创建一个包含可用 KDC 列表的 /etc/krb5.conf
文件,然后使用 on(roles(:all)) do upload!(file) end
将其上传到所有客户端机器。
当使用过滤器时,就会出现一个问题。过滤器旨在将实际使用的主机集限制为整体阶段中的一组子集,但在上述情况下,这应该如何应用呢?
如果过滤器同时应用于交互和配置方面,那么部署的任何配置文件都不会与过滤器排除的主机上的配置文件相同。这几乎肯定不是想要的,过滤器应该只应用于交互,以确保部署的任何配置文件在整个阶段中都是相同的。
因此,我们定义了两种不同类型的过滤器,交互过滤器称为On-过滤器,配置过滤器称为Property-过滤器。
On-过滤
On-过滤器仅应用于调用 SSH 的on()
方法。有两种默认类型
在以上两种情况下,当使用逗号分隔列表指定过滤器时,最终过滤器是所有组件的并集。但是,当声明多个过滤器时,结果是交集。
这意味着您可以按角色和主机进行过滤,但您将获得服务器的交集。例如,假设您按角色app
进行过滤,然后按主机名server1
和server2
进行过滤。Capistrano 首先会将可用服务器过滤为仅包含角色app
的服务器,然后过滤它们以查找主机名为server1
或server2
的服务器。如果只有server2
具有角色app
(server1
具有其他角色),那么在这种情况下,您的任务将仅在server2
上运行。
也可以添加自定义过滤器;请参阅自定义过滤器。
Property-过滤
属性过滤器根据服务器属性的值选择服务器,并通过传递给 roles()
方法(以及在 release_roles()
和 primary()
等方法中隐式使用)的选项来指定。
例如,‘no_release’ 属性及其在 release_roles()
方法中的使用。
有关详细信息,请参阅 文档