2013-06-05 5 views
62

एक बड़ी परियोजना के लिए सबसे अच्छा तरीका जानने की कोशिश कर रहा है। run_list पर नुस्खा जोड़ने के विरोध में include_recipe का उपयोग कर रेसिपी के भीतर व्यंजनों को जोड़ने के लिए उचित कब है? क्या अंगूठे का अच्छा नियम है?क्या मुझे include_recipe का उपयोग करना चाहिए या नुस्खा को run_list में जोड़ना चाहिए?

उत्तर

72

जैसा कि मैंने इसे देखा है, कोई भी नुस्खा अपनी खाली मशीन पर चलने में सक्षम होना चाहिए। तो अगर कुछ नुस्खा ए रेसिपी बी पर निर्भर करता है तो इससे पहले, मैं हमेशा include_recipe का उपयोग करता हूं।

उदाहरण के लिए: 2 कुकबुक, टोमकैट और जावा। टॉमकैट को जावा की आवश्यकता है।

  1. कुछ उपयोगकर्ता बिल्ला इंस्टॉल करना चाहता है, वह पता नहीं कि वह वास्तव में इसे स्थापित करने के लिए कुछ अन्य रसोई की किताब की आवश्यकता हो सकती है। वह टॉमकैट रेसिपी चलाता है और या तो यह कुछ पूरी तरह से अनुपयोगी त्रुटि संदेश जैसे "नो जावा मिला" या इससे भी बदतर में विफल रहता है - यह सफल होता है, लेकिन फिर निश्चित रूप से उपयोगकर्ता टॉमकैट शुरू नहीं कर सकता है, क्योंकि उसके पास जावा स्थापित नहीं है।

  2. लेकिन जब वहाँ बिल्ला रसोई की किताब में एक include_recipe 'java' लाइन है, जो भी मेटाडाटा में एक depends 'java' लाइन, उपयोगकर्ता जब बिल्ला स्थापित करने का प्रयास की आवश्यकता है, समझा जा सकता त्रुटि संदेश दिखाई देगा: "रसोई की किताब जावा नहीं मिला"। इस तरह वास्तव में उपयोगकर्ता वास्तव में व्यंजनों को चलाने के बिना निर्भरता डाउनलोड कर सकते हैं (या यहां तक ​​कि कुछ स्वचालित उपकरण के साथ), लेकिन मेटाडेटा पढ़ना।

+7

व्यंजनों की पुनरावृत्ति से बचने के बारे में शेफ कितना बुद्धिमान है? तो यदि आपकी कुकबुक 'पैरेंट' पर निर्भर करती है, तो आप 'शामिल_recipe parent' और कुछ अनजान आत्मा रन सूची में 'पैरेंट' जोड़ती है, क्या 'parent :: default.rb' दो बार दौड़ती है? यदि 'पैरेंट' को सही ढंग से तैयार किया गया है] (http://docs.opscode.com/chef_why.html#idempotence), मशीन के साथ कुछ भी बुरा नहीं होगा, लेकिन जब आप बूटस्ट्रैप/एक नया अभिसरण करते हैं तो यह कितना समय बर्बाद हो जाएगा नोड? यदि शेफ डुप्लिकेशन को डुबकी में स्वचालित नहीं है, तो क्या इसे मैन्युअल रूप से टालने के लिए एक अनुशंसित तरीका है? –

+6

यह एक ही नुस्खा कई बार लोड नहीं करता है। यह इसे छोड़ देता है, अगर उसने इसे पहले ही देखा है। –

+0

मुझे लगता है कि यह बेवकूफता का लाभ है: यदि आप एक ही परिणाम प्राप्त करने की गारंटी देते हैं, भले ही आप इसे कितनी बार चलाते हैं, तो आप जानते हैं कि यदि आप पहले ही चल चुके हैं तो आप उसे छोड़ सकते हैं! धन्यवाद ड्रैको। –

1

सभी तर्कों को रन सूचियों के साथ नियंत्रित किया जाना चाहिए। कुकबुक, जितना संभव हो उतना प्रयास करें, वे फिर से उपयोग करने योग्य नहीं हैं क्योंकि लोग सोचना चाहते हैं। सभी include_recipe एक और स्थान जोड़ता है जहां उपयोगकर्ताओं को यह पता लगाना पड़ता है कि रन सूची क्या करने जा रही है, इसलिए इसे स्पष्ट बनाएं और इसे रन सूची में रखें।

+1

मुझे लगता है कि निर्भरता स्पष्ट करने के लिए किसी को 'include_recipe' का उपयोग करना चाहिए। – user1071847

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