这是我在config / deploy
中的production.rbInstance Details
server '198.61.179.237', :web, :app, :db, primary: true
server '198.61.228.160', :file_server
# Rails Environment
set :rails_env, 'production'
来自deploy.rb
namespace :check do
task :function_1, :roles => :web do
puts 'function_1'
end
task :function_2, :roles => :file_server do
puts 'filesssss'
end
end
但是当我尝试做
时cap HOSTS=198.61.228.160 production check:function_2
cap HOSTS=198.61.228.160 production check:function_1
cap HOSTS=198.61.179.237 production check:function_2
cap HOSTS=198.61.179.237 production check:function_1
他们中的每个人都给出了相应的输出。但根据声明
function_1
仅适用于:role => :web
,同样function_2
仅适用于:role => :file_server
。
我哪里错了? 什么是正确的方法?
答案 0 :(得分:1)
我相信你想要的是cap HOSTFILTER=198.61.228.160 function_2
或cap HOSTFILTER=198.61.179.237 function_1
这是因为HOSTFILTER检查所有服务器与功能角色和您正在寻找的服务器的交叉点。 here
可以找到一个很好的解释Pete Hodgson我们也可以看到这个因为手册:
$ cap -H
HOSTS
Execute the tasks against this comma-separated list of hosts.
Effectively, this makes the host(s) part of every roles.
HOSTFILTER
Execute tasks against this comma-separated list of host,
but only if the host has the proper role for the task.
HOSTROLEFILTER
Execute tasks against the hosts in this comma-separated list of roles,
but only if the host has the proper role for the task.
ROLES
Execute tasks against this comma-separated list of roles. Hosts which
do not have the right roles will be skipped.