如何为特定角色创建角色并运行capistrano任务?

时间:2014-03-25 07:41:46

标签: ruby-on-rails ruby-on-rails-4 capistrano roles role

这是我在config / deploy

中的production.rb
Instance 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

我哪里错了? 什么是正确的方法?

1 个答案:

答案 0 :(得分:1)

我相信你想要的是cap HOSTFILTER=198.61.228.160 function_2cap 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.