दिलचस्प पोस्ट
PHP / MySQL डालें पंक्ति तो 'आईडी' प्राप्त करें AngularJS में ग्लोबल वैरिएबल क्या फ्लेक्स / बायसन के लिए कोई विकल्प है जो 8-बिट एम्बेडेड सिस्टम पर प्रयोग करने योग्य है? आर में असाइनमेंट ऑपरेटर: '=' और '<-' लचीलाशर्क में शार्ड्स और प्रतिकृतियां अजगर उद्धरण: सहायता टेक्स्ट में नई पंक्ति कैसे सम्मिलित करें? नोडवेल बनाम आंतरिक एचटीएमएल और टेक्स्ट कंटेंट कैसे चुनाव करें? JavaScript में कैश साफ़ करें दस्तावेज़ के बीच अंतर। फ़्रेड एंड फ़ंक्शन फ़ंक्शन अभिव्यक्ति नाम का उपयोग क्यों करें? डीजेन्गा ने पोस्ट_एसएवी संकेत से कई सारे कई क्षेत्रों तक पहुंचा एंड्रॉइड: कैसे आवेदन रक्षा एप काम करता है? जावास्क्रिप्ट का उपयोग करते हुए फ़ाइल (उपयोगकर्ता निर्देशिका) में कैसे लिखें? कैसे एक एकल उद्धरण AVK के अंदर से बचें आधिकारिक डिजाइन लाइब्रेरी से फ़्लोटिंगएक्शनबटन के साथ इन्फ्लेट एक्सप्शन

बावर्ची व्यंजनों में समय बनाम चलाने का समय संकलित करें

जावा के पाठ्यक्रम को स्थापित करने के लिए मेरे पास जावा (जावा) नामक निम्नलिखित (सरलीकृत) नुस्खा है।

फ़ाइल व्यंजनों / default.rb

include_recipe "install_java" 

फ़ाइल व्यंजनों / install_java.rb

 # Install RPM from yum repo via yum_install library function yum_install("jdk1.7.0_51") # List the directories in /usr/java jdk_dir = `ls -ld /usr/java/jdk1.* | sort | tail -1` if jdk_dir.empty? raise "Missing JDK installation" end 

जब मैं "महाराज-ग्राहक -ओ नुस्खा [जावा]" का नुस्खा चलाता हूं

 Synchronizing Cookbooks: - java Compiling Cookbooks... ls: /usr/java/jdk1.*: No such file or directory 

================================================== ========================= पकाने की विधि /var/chef/cache/cookbooks/java/recipes/default.rb ===== में संकलन त्रुटि ================================================== ====================

 RuntimeError ------------ Missing JDK installation 

ऐसा लगता है कि yum_install () फ़ंक्शन को कॉल नहीं किया जा रहा है हालांकि, अगर मैं install_java.rb नुस्खा को बस में बदलता हूं

 # Install RPM from yum repo via yum_install library function yum_install("jdk1.7.0_51") 

यह काम करता हैं।

ऐसा क्यों है?

Solutions Collecting From Web of "बावर्ची व्यंजनों में समय बनाम चलाने का समय संकलित करें"

ठीक है, तो शेफ दो पास ले जाता है

"समय संकलन करें"

मैं इस संकलन चरण को कॉल करना चाहता हूं।
इस बिंदु पर, आपके नुस्खा में वास्तविक रूबी कोड चलाया जाता है। इसका मतलब है कि कोई भी बयान jdk_dir = ls -ld /usr/java/jdk1.* | sort | tail -1 jdk_dir = ls -ld /usr/java/jdk1.* | sort | tail -1 jdk_dir = ls -ld /usr/java/jdk1.* | sort | tail -1 उस समय निष्पादित होने जा रहे हैं। हालांकि, रूबी कोड जो शेफ संसाधन yum_install("jdk1.7.0_51") बनाता है केवल संसाधनों को बनाता है उन नुस्खा कोड के द्वारा बनाई गई उन संसाधनों को तब बावर्ची resource_collection में जोड़ा जाता है, लेकिन संसाधन क्रियाएं अभी तक नहीं चल रही हैं।

"कनवेर्ज़ टाइम"

मैं इसे संकल्प चरण कहते हैं इस बिंदु पर – सभी व्यंजनों के चलने के बाद (संसाधन बनाने, लेकिन चलने वाली क्रियाएं नहीं) – हम वास्तव में संसाधन कार्यों को चलाने के लिए तैयार हैं महाराज resource_collection में पहले संसाधन के साथ शुरू होता है और उस संसाधन पर निर्दिष्ट क्रिया चलाता है। यह संग्रह के माध्यम से काम करता है, जब तक कि सभी संसाधनों की कार्रवाइयों को चलने तक आवश्यकतानुसार कॉलिंग नोटिफिकेशन नहीं होता है। तब आपका रन पूरा हो गया है

आपका विशिष्ट मामला

इसलिए, आपके मामले में, आप संग्रह चरण में निर्देशिका तक पहुंचने का प्रयास कर रहे हैं, लेकिन आप संकल्प चरण तक निर्देशिका नहीं बनाते हैं। यदि आप रिज़ॉल्यूशन चरण के दौरान रब्बी कोड चलाने के लिए चाहते हैं तो आप ऐसा कर सकते हैं ruby_block संसाधन में। उदाहरण के लिए:

 ruby_block 'verify java is there' do block do if jdk_dir.empty? raise "Missing JDK installation, reinstall" end end end 

यदि यह ruby_block संसाधन आपके yum_install (जो yum_install होना चाहिए) संसाधन के बाद रखा गया है, तो यह संग्रह संग्रह के बाद स्थापित संसाधन के बाद रखा जाएगा, और फिर शेफ रन के दौरान रिज़ॉल्यूशन चरण (यानी, समय को चलाने ) के दौरान निष्पादित किया जाएगा।

इसलिए मैं पूरी तरह से निश्चित नहीं हो सकता, लेकिन यह संभव है कि yum_install एक संसाधन है (या किसी तरह का सहायक जो एक संसाधन बनाता है)। व्यंजन विधि प्रभावी रूप से दो पास में चलते हैं पहले प्रत्येक फ़ाइल निष्पादित की जाती है (शाब्दिक रूबी के exec ) जब एक संसाधन डीएसएल में बनाया जाता है तो यह एक इन-मेमोरी संसाधन ऑब्जेक्ट को "संकलित" करता है जो वैश्विक संसाधन संग्रह (सभी संसाधनों का एक बड़ा सरणी) में जोड़ा जाता है। एक बार सभी नुस्खा फ़ाइलें संकलित हो जाए, बावर्ची संसाधन संग्रह पर लूप करता है और अनुरोध के अनुसार प्रत्येक संसाधन की कार्रवाई को चलाता है (आवश्यकतानुसार नोटिफिकेशन भेजना)

तो इस सब में सभी का अर्थ है कि yum_install लाइन संभवतया कुछ भी नहीं करती है जिस समय यह किसी ऑब्जेक्ट को एक सरणी में धक्का से अलग करता है। आप अन्य कोड को ruby_code ब्लॉक में लपेट कर सकते हैं, जब तक कि समय का ruby_code न हो जाए।