角色过滤
您可能遇到只希望部署到与单个角色匹配的服务器的情况。例如,您可能更改了 Web 角色的工作方式,但不想触发对数据库服务器的部署。
您可以使用角色过滤器将 Capistrano 任务限制为仅匹配给定角色或角色的服务器。
如果过滤器不匹配任何服务器,则不会执行任何操作。
如果您指定了一个过滤器,它将匹配具有该角色的任何服务器,并且它将对服务器拥有的每个角色运行所有任务。例如,如果您过滤具有web
角色的服务器,并且服务器同时具有web
和db
角色,则将在其上执行web
和db
角色任务。
指定角色过滤器
有三种方法可以指定角色过滤器。
环境变量
如果设置了环境变量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 符号,因此它们可以合法地包含任何字符。但是,为了允许在一行上指定多个角色,我们使用逗号作为分隔符。
要使用角色过滤器的正则表达式,请用“/”开头和结尾。由于上述原因,这些正则表达式可能不包含逗号。