2009-01-09 16 views
53

का उपयोग कर एक विशिष्ट सर्वर पर तैनाती कैसे करें मेरे पास उत्पादन में एक प्रणाली है जिसमें कई भूमिकाओं में कई सर्वर हैं। मैं उत्पादन में हर सर्वर को पुन: नियोजित किए बिना, उस विशिष्ट सर्वर पर तैनात करके एक नया ऐप सर्वर परीक्षण करना चाहता हूं। क्या कैपिस्ट्रानो को किसी विशिष्ट सर्वर पर तैनात करने का कोई तरीका है? आदर्श रूप में मैं अगर मैं सिर्फ app2.example.com को तैनात करना चाहता था की तरहCapistrano

cap SERVER=app2.example.com ROLE=app production deploy 

कुछ चलाने के लिए सक्षम होना चाहते हैं।

धन्यवाद!

[अद्यतन] मैं क्रियान्वित करते हुए समाधान Wulong ने सुझाव दिया की कोशिश की:

cap HOSTS=app2.server.hostname ROLE=app qa deploy 

लेकिन Capistrano एप्लिकेशन कार्यों के अलावा उस सर्वर पर अन्य भूमिकाओं के लिए कार्य निष्पादित करने के लिए कोशिश कर लग रहा था। शायद मुझे टोपी का अपना संस्करण अपडेट करना होगा (मैं v2.2.0 चला रहा हूं)?

उत्तर

122

मैं Capistrano उपयोगकर्ताओं की सूची here पर कोई प्रश्न पोस्ट करने समाप्त हो गया,

cap HOSTS=app2.example.com production deploy 

ध्यान दें कि ऐसा हर भूमिका में होने के रूप में APP2 व्यवहार करेगा:


मेजबान वातावरण चर का प्रयास करें: और Jamis से निम्नलिखित प्रतिक्रिया (स्पष्टता के लिए यहाँ मेरे द्वारा एक सा संपादित) मिला , बस नहीं जो भी भूमिका (रों) ऐसा होता है में घोषित किया जाना है।

क्या आप चाहते हैं एक नियमित रूप से तैनाती करने के लिए है, लेकिन केवल के रूप में ही APP2 अपने नुस्खा फ़ाइल में घोषित किया जाता है, तो आप APP2 से कार्य करने और है HOSTFILTERका उपयोग कर सकते हैं बजायचर:

cap HOSTFILTER=app2.example.com production deploy 

[...]

इस ठोस उदाहरण पर विचार करें। अपने स्क्रिप्ट मान लीजिए तीन सर्वर, ए, बी, और सी को परिभाषित करता है और यह एक काम, "foo" कि (डिफ़ॉल्ट रूप से) ए और बी पर चलाना चाहता है परिभाषित करता है, लेकिन नहीं सी इस तरह:

role :app, "A", "B" 
role :web, "C" 

task :foo, :roles => :app do 
    run "echo hello" 
end 

अब, अगर आप cap foo करते हैं, यह गूंज आदेश दोनों ए और बी

पर चलेगा

आप cap HOSTS=C foo करते हैं, यह की परवाह किए बिना सी पर गूंज आदेश, चलेंगे: कार्य करने के लिए भूमिकाओं पैरामीटर ।

यदि आप cap HOSTFILTER=C foo करते हैं, तो यह पर इको कमांड नहीं चलाएगा, क्योंकि (ए बी) और (सी) का अंतर एक खाली सेट है।(ए) (वहाँ foo के मेजबान की सूची में कोई करता है, जिन्हें सी से मेल कर रहे हैं)

आप cap HOSTFILTER=A foo करते हैं, यह, पर केवल एक गूंज आदेश चला जाएगा, क्योंकि (ए बी) के साथ (ए) विभाजित है।

अंत में, यदि आप cap HOSTFILTER=A,B,C foo करते हैं, यह ए और बी (लेकिन सी) पर गूंज आदेश, चलेंगे क्योंकि (ए बी) के साथ विभाजित (ए बी सी) (ए बी) है।

संक्षेप में: HOSTS मेजबान या भूमिकाओं की घोषणा पूरी तरह से ओवरराइड करता है कार्य के लिए, और निर्दिष्ट होस्ट के खिलाफ सबकुछ चलाने के लिए मजबूर करता है। दूसरी तरफ HOSTFILTER, मौजूदा होस्ट को दिए गए सूची के विरुद्ध बस फ़िल्टर करता है, केवल उन सर्वरों को चुनता है जो पहले से ही कार्य सर्वर सूची में हैं।

+0

ऐसा लगता है कि यह कैपिस्ट्रानो 3.4 – collimarco

+0

कैपिस्ट्रानो 3 के साथ अब और काम नहीं करता है, आप HOSTS पर्यावरण चर का उपयोग करेंगे जो HOSTFILTER कैपिस्ट्रानो 2 में है। Http://capistranorb.com/documentation/advanced-features/host-filtering / – codener

1

आप deploy.rb में इस तरह कुछ करने के लिए सक्षम होना चाहिए:

task :production do 
    if ENV['SERVER'] && ENV['ROLE'] 
    role ENV['ROLE'], ENV['SERVER'] 
    else 
    # your full config 
    end 
end 
3

निम्नलिखित बॉक्स से बाहर काम करना चाहिए:

cap HOSTS=app2.example.com ROLE=app deploy 

आप को तैनात करने के लिए चाहते हैं> 1 सर्वर एक ही भूमिका के साथ:

cap HOSTS=app2.example.com,app3.example.com,app4.example.com ROLE=app deploy 
+1

मैं = app2.server टोपी मेजबानों को क्रियान्वित करते हुए पहला मामला (एक ही ऐप्लिकेशन सर्वर से तैनाती) की कोशिश की .hostname ROLE = ऐप qa परिनियोजित करें लेकिन कैपिस्ट्रानो ऐप कार्यों के अतिरिक्त उस सर्वर पर अन्य भूमिकाओं के लिए कार्यों को निष्पादित करने का प्रयास कर रहा था। शायद मुझे टोपी का संस्करण अपडेट करना होगा (मैं 2.2.0 चला रहा हूं)। –

+0

HOSTFILTER उत्तर है, यह वही नहीं है जो आप चाहते हैं। –

1

मुझे एक ही समस्या है और निम्नलिखित की कोशिश की। यह काम करता है:

cap production ROLES=web HOSTS=machine1 stats 
0

तुम भी निर्दिष्ट कर सकते हैं काम स्तरीय मेजबान इस तरह पैरामीटर:

task :ship_artifacts, :hosts => ENV['DEST_HOST'] do 

end 
संबंधित मुद्दे