我正在使用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服务器可以改变。
答案 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。
中找到