2012-06-15 12 views
6

मैं कैपिस्ट्रानो कार्य में वर्तमान सर्वर का संदर्भ कैसे दूंगा? मैं एपीसी कैश को साफ़ करने के लिए curl स्थानीय फ़ाइल चाहता हूं लेकिन सर्वर localhost पर नहीं सुनता है इसलिए मुझे सर्वर का आईपी पता चाहिए।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 पर चलाया जाता है जब यह curl रों http://1.1.1.1/deploy/clearAPC.php लेकिन यह कॉल curl रों http://2.2.2.2/deploy/clearAPC.php

उत्तर

11

जब 2.2.2.2 पर चलने वहाँ जादुई $ CAPISTRANO है: होस्ट $

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

वास्तव में आप क्या चाहते हैं क्या करना चाहिए।

नोट: इसे स्ट्रिंग इंटरपोलेशन के माध्यम से एक चर के रूप में उपयोग न करें, कैपिस्ट्रानो केवल $ CAPISTRANO को प्रतिस्थापित करेगा: स्ट्रिंग में HOST $।

एक बहुत ही अजीब और (AFAIK) गैर-दस्तावेजी सुविधा :-)

+0

यह वास्तव में कम से कम ज्ञात कैपिस्ट्रानो सुविधा हो सकता है ... – paukul

+0

यह वास्तव में हैकी दिखता है। Capistrano लोग इसे एक विधि क्यों नहीं बनाया? – user1158559

+0

शायद @leehambley उत्तर जानता है;) मैं उसे इस प्रश्न पर इंगित करूंगा – paukul

28

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 

स्वीकार किए जाते हैं जवाब काम करेंगे, लेकिन यह एक आप के रूप में चर/तरीकों सर्वर का उपयोग

+0

'find_servers_for_task' जैसा वर्णन किया गया है ठीक उसी तरह काम करता है। धन्यवाद! – piersadrian

+1

यह स्वीकार्य उत्तर से बेहतर काम करता है, खासकर यदि आप चलाने() के बजाय कैप्चर() का उपयोग करने का निर्णय लेते हैं। –

0

मैं वर्तमान सर्वर मैं करने के लिए की तैनाती की गई थी जानना चाहता था की सुविधा देता है, तो कि मैं कैंप फायर को एक संदेश भेज सकता था। तैनाती तैनाती को सूचित: यह है कि मैं क्या यह पता लगाने में सक्षम था, हालांकि मुझे यकीन है कि वहाँ एक बेहतर तरीका

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

इसलिए जब मैं इसे इस पोस्ट कैम्पफायर के लिए मैं टोपी QA2 कैम्पफायर का उपयोग कर 20121206154442 की तैनाती कर रहा हूँ तैनात है: flex_master

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

मैं इसे पसंद करता हूं। 'System' कमांड के लिए, $ CAPISTRANO: HOST $ इस काम का उपयोग करते समय काम नहीं करता है। – bibstha

0

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 
संबंधित मुद्दे