在Capistrano任务中引用当前服务器

Bra*_*yer 6 php ruby deployment capistrano apc

如何在Capistrano任务中引用当前服务器?我想要curl一个本地文件来清除APC缓存,但是服务器没有监听,localhost所以我需要服务器的IP地址.

例如,

role :web, "1.1.1.1", "2.2.2.2", "3.3.3.3"

task :clear_apc, :role => :web do
    run "curl http://#{WHAT_DO_I_PUT_HERE}/deploy/clearAPC.php"
end
Run Code Online (Sandbox Code Playgroud)

我会用这样当任务在1.1.1.1运行它什么变量curls ^ http://1.1.1.1/deploy/clearAPC.php但是当2.2.2.2运行它调用curls ^http://2.2.2.2/deploy/clearAPC.php

use*_*559 28

在Capistrano中,每个服务器都不会执行一次任务,run会在每个服务器上执行命令.这是你应该做的事情:

task :clear_apc, :role => :web do
    find_servers_for_task(current_task).each do |current_server|

        run "curl http://#{current_server.host}/deploy/clearAPC.php", :hosts => current_server.host

    end
end
Run Code Online (Sandbox Code Playgroud)

接受的答案将起作用,但是这个答案允许您作为变量/方法访问服务器


pau*_*kul 11

有神奇的$ CAPISTRANO:HOST $

run "curl http://$CAPISTRANO:HOST$/deploy/clearAPC.php" 
Run Code Online (Sandbox Code Playgroud)

应该做你想要的.

注意:不要通过字符串插值将它用作变量,capistrano只会替换字符串本身中的$ CAPISTRANO:HOST $.

这是一个非常奇怪和(afaik)无证的功能:-)