簡體   English   中英

在 Capistrano 任務中引用當前服務器

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM