मैं शेफ विशेषताओं में मेरी सेवा के लिए एक कॉन्फ़िगरेशन उत्पन्न कर रहा हूं। हालांकि, किसी बिंदु पर, मुझे विशेषता मैश को एक साधारण रूबी हैश में बदलना होगा। यह शेफ 10:शेफ 11: रूबी हैश में गुणों को बदलने का कोई तरीका?
node.myapp.config.to_hash
हालांकि, शेफ 11 से शुरू होने पर यह ठीक काम नहीं करता है, यह काम नहीं करता है। केवल विशेषता का शीर्ष-स्तर एक हैश में परिवर्तित हो जाता है, उसके बाद घोंसला वाले मान अपरिवर्तनीय मैश ऑब्जेक्ट्स शेष होते हैं। उन्हें संशोधित करना इस तरह त्रुटियों की ओर जाता है:
बावर्ची :: अपवाद :: ImmutableAttributeModification ---------------------------- -------------------- नोड विशेषताएँ केवल पढ़ने के लिए होती हैं जब आप निर्दिष्ट नहीं करते कि कौन सा प्राथमिकता स्तर सेट करना है। करने के लिए ' `node.default [" कुंजी "] =" मूल्य "की तरह
एक विशेषता उपयोग कोड सेट मैं तरीकों से काम नहीं करते इस समस्या के समाधान प्राप्त करने के लिए के एक झुंड की कोशिश की है:
node.myapp.config.dup.to_hash
JSON.parse(node.myapp.config.to_json)
जो यह बहुत अच्छा काम करना चाहिए की तरह है, में परिणाम लगता है json पार्स करने हैक,:
JSON::ParserError
unexpected token at '"#<Chef::Node::Attribute:0x000000020eee88>"'
कोई वास्तविक विश्वसनीय तरीका प्रत्येक रसोई की किताब में एक नेस्टेड पार्स समारोह सहित, एक सरल करने के लिए गुण परिवर्तित करने के लिए की कमी है, सामान्य, जाओ ओड पुरानी रूबी हैश?
आप हैश आवश्यकता क्यों है? –
मुझे इसकी आवश्यकता नहीं है - मैं किसी भी समय मुझे छोड़ सकता हूं! लेकिन गंभीरता से, मैं कई अलग-अलग विशेषताओं में से एक कॉन्फ़िगरेशन फ़ाइल बना रहा हूं, और मुझे उन्हें कॉन्फ़िगरेशन फ़ाइल में लिखने से पहले उन्हें संशोधित करने की आवश्यकता है। गुणों को हैश में परिवर्तित करना, उन्हें उत्परिवर्तित करना और फिर हैश का उपयोग करना वास्तव में सहायक है। –