Ссылка на текущий сервер в задаче Capistrano


Как бы я ссылался на текущий сервер в задаче 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 она curls http://1.1.1.1/deploy/clearAPC.php, но при запуске на 2.2.2.2 она вызывала curls http://2.2.2.2/deploy/clearAPC.php

Author: Brad Dwyer, 2012-06-15

5 answers

Вот волшебный $CAPISTRANO: ХОСТ$

run "curl http://$CAPISTRANO:HOST$/deploy/clearAPC.php" 

Должен делать именно то, что вы хотите.

Примечание: не используйте его в качестве переменной с помощью интерполяции строк, capistrano просто заменит $CAPISTRANO:HOST$ в самой строке.

Это очень странная и (afaik) недокументированная функция:-)

 11
Author: paukul, 2012-06-15 16:13:18

В Капистрано задачи не выполняются один раз для каждого сервера, 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

Принятый ответ будет работать, но этот позволяет вам обращаться к серверам как к переменным/методам

 28
Author: user1158559, 2012-11-20 11:53:00
current_host = capture("echo $CAPISTRANO:HOST$").strip
 3
Author: Florian Eck, 2013-08-28 13:45:22

Я хотел знать текущий сервер, на котором я развертывался, чтобы я мог отправить сообщение в campfire. Это то, что мне удалось выяснить, хотя я уверен, что есть лучший способ

 actions = current_task.namespace.parent.logger.instance_variable_get('@options')[:actions]
 message = "I am deploying #{fetch(:latest_release).split('/').last} using cap #{actions.join(' ')}"

Поэтому, когда я разворачиваю его, он публикует это в campfire Я развертываю 20121206154442 с помощью cap QA2 campfire: уведомить о развертывании развертывание: flex_master

 0
Author: J_McCaffrey, 2012-12-07 23:51:32

Требуется Капистрано (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
 0
Author: user3255084, 2014-01-30 21:32:47