我能分开我的Capistrano capfile吗?

时间:2011-09-07 14:28:23

标签: capistrano

我有一个capfile,其顶部定义了一个角色,下面有一堆任务。它工作得很好,但我希望能够轻松(并以编程方式)更新角色列表中的计算机。我知道我可以做到这一点,但为了安全起见,我希望能够将我的capfile拆分成(基本上)两个文件:主机和任务

目前(一般而言):

role :machines,
"machine1",
"machine2"

desc "This is task 1"
task :task1 do
  # stuff
end

我希望能够拥有以下内容(忽略“语法”):

role :machines ==> {Get this information from 'hosts.cap' or something}

desc "This is task 1"
task :task1 do
  # stuff
end

有没有办法打破capfile?或者我需要潜入消息来源吗?

2 个答案:

答案 0 :(得分:1)

由于Capfile只是Ruby,因此您可以使用Ruby代码来执行您想要的操作。例如,如果您的hosts.cap文件如下所示:

db-master.example.com
db-slave1.example.com

你会在这个Ruby代码的数组中得到它:

File.read('hosts.cap').strip.split

并正确地将其发送到role,请使用splat(*)运算符:

role :db_hosts, *File.read('hosts.cap').strip.split

虽然我建议将它分为两​​部分,因为它更清楚:

machines = File.read('hosts.cap').strip.split
role :db_hosts, *machines

答案 1 :(得分:0)

香草Capfile过去常带有load 'config/deploy'行 - 也许您可以利用它来加载多个文件。