在capistrano中,我可以从角色符号中检索服务器信息吗?

时间:2011-10-04 21:52:59

标签: capistrano host

我正在使用Capistrano以非标准方式部署应用程序,并且我有一个非常大的文件,我通过网关上传到多个服务器。我想,而不是让capistrano将这个文件从部署机器上传到列表中的每个服务器,将其上传到网关服务器,然后从那里沿着局域网scp它(当我手动测试它时速度要快得多)

我很难找到一种让capistrano这样做的方法。我可以使用类似的东西:

myservers = find_servers_for_task(current_task)
myservers.each do |server|
  run "scp HARDCODED_GATEWAY:/remote/file /local/file", :hosts => server.host
end

我不喜欢硬编码网关;我在上面定义了一个名为:gateway的角色。有没有办法从:网关符号中提取主机名?我知道角色中可能有多个服务器,但我很满意只为角色阵列中的第一个服务器提供服务器信息 - 或者最后一个;为了我的目的,其中只有一台服务器,但WHICH服务器可以改变。

2 个答案:

答案 0 :(得分:1)

我对ruby很新,所以我可能会读错了,但我认为你可以通过roles[:gateway].servers[0].host从角色中获取主持人。这似乎回答了你提出的问题。

答案 1 :(得分:0)

您可以通过

设置特定于capistrano配方的变量
set :gateway, "HARDCODED_GATEWAY:/remote/file"

以后再使用它:

myservers = find_servers_for_task(current_task)
myservers.each do |server|
  run "scp #{gateway} /local/file", :hosts => server.host
end

如果要在运行时输入,请使用以下命令:

set(:gateway) { Capistrano::CLI.ui.ask("gateway: ") }

更多信息可在capistrano wiki

中找到