[英]Referencing the current server in Capistrano task
如何在 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
我會使用什么變量,以便當任務在 1.1.1.1 上運行時它curl
s http://1.1.1.1/deploy/clearAPC.php
但在 2.2.2.2 上運行時它調用curl
s http://2.2.2.2/deploy/clearAPC.php
在 Capistrano 中,任務不會為每台服務器執行一次,運行會在每台服務器上執行您的命令。 這是你應該做的:
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
接受的答案會起作用,但是這個答案可以讓您以變量/方法的形式訪問服務器
有神奇的 $CAPISTRANO:HOST$
run "curl http://$CAPISTRANO:HOST$/deploy/clearAPC.php"
應該做你想做的。
注意:不要通過字符串插值將其用作變量,capistrano 只會替換字符串本身中的 $CAPISTRANO:HOST$。
這是一個非常奇怪且(afaik)未記錄的功能:-)
current_host = capture("echo $CAPISTRANO:HOST$").strip
Capistrano 3 - 服務器可作為對象使用,在角色塊中具有一組屬性:
on roles(:app) do |server|
例如,將主機名屬性傳遞給 docker compose
on roles(:app) do |server|
execute "docker-compose --build-arg SOME_HOST_NEEDED=#{server.hostname} ......
end
我想知道我正在部署到的當前服務器,以便我可以向營火發送消息。 這是我能夠弄清楚的,盡管我確定有更好的方法
actions = current_task.namespace.parent.logger.instance_variable_get('@options')[:actions]
message = "I am deploying #{fetch(:latest_release).split('/').last} using cap #{actions.join(' ')}"
所以當我將它部署到營火時,我正在使用 cap QA2 campfire:notify deploy deploy:flex_master 部署 20121206154442
需要 capistrano (2.13.5)
puts current_task.namespace.logger.instance_variable_get('@base_logger').instance_variable_get('@options')[:actions].join(' ')
想通了這一點
puts current_task.namespace.logger.inspect
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.