2012-06-15 18 views
6

Capistranoタスクで現在のサーバーをどのように参照しますか?私はcurl APCキャッシュをクリアするローカルファイルにしたいが、サーバはlocalhostでリッスンしないので、サーバのIPアドレスが必要です。例えば Capistranoタスクの現在のサーバーの参照

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上で実行されたときに、それcurlhttp://1.1.1.1/deploy/clearAPC.php 2.2.2.2上で実行したときにそれがcurlhttp://2.2.2.2/deploy/clearAPC.php

答えて

11

を呼び出します魔法の$ CAPISTRANOがあります。ホスト:

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

あなたが望むものを正確に行う必要があります。

注:文字列補間による変数として使用しないでください。capistranoは文字列自体の$ CAPISTRANO:HOST $を置き換えます。カピストラーノで

+0

これは実際にはほとんど知られていないカピストラーノの機能かもしれません... – paukul

+0

これは本当にハッキーに見えます。なぜカピストラーノの人はそれを方法にしなかったのですか? – user1158559

+0

多分@leehambleyは答えを知っています;)私はこの質問に彼を指します – paukul

28

:-)(私の知る限り)非常に奇妙な、文書化されていない機能ですが、タスクはサーバごとに一度実行されません

は、実行は各サーバー上でコマンドを実行します。私は私が展開された現在のサーバーを知りたいと思った変数/メソッド

+0

'find_servers_for_task'は説明したとおりに動作します。ありがとうございました! – piersadrian

+1

これは、特にrun()の代わりにcapture()を使用することを決めた場合には、受け入れられた答えより優れています。 –

0

ように、受け入れ答えは動作します

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 

が、これはあなたがサーバーにアクセスすることができます:ここではあなたの代わりに何をすべきかであります私はキャンプファイヤーにメッセージを送ることができた。デプロイデプロイを通知:これは私が、私は確信しているのに良い方法私はそれが私がキャップQA2のキャンプファイヤーを使用して20121206154442展開しています をキャンプファイヤーためにこれを掲示展開ので

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

あり、把握することができたものです。 flex_master

3
current_host = capture("echo $CAPISTRANO:HOST$").strip 
+0

私はこれが好きです。 'system'コマンドの場合、$ CAPISTRANO:HOST $はうまく動作しません。 – bibstha

0

puts current_task.namespace.logger.instance_variable_get('@base_logger').instance_variable_get('@options')[:actions].join(' ') 

0123でこれを考え出し必要(2.13.5)カピストラーノ
puts current_task.namespace.logger.inspect 
関連する問題