2011-12-20 19 views
7

मैं बस अपने पहले मणि (अच्छी तरह से रूबी के लिए भी नया) पर काम कर रहा हूं, अब तक पूरा कोड यहां है;रत्नों के भीतर yaml फ़ाइलों का उपयोग

https://github.com/mikeyhogarth/tablecloth

एक बात मैं क्या करने की कोशिश की है जो मणि (lib/मेज़पोश/YAML/qty.yaml से कम) एक देखने के रूप में उपयोग कर सकते हैं एक YAML फ़ाइल तैयार करना है। यह सब बहुत अच्छा काम करता है और यूनिट परीक्षण सभी गुजरता है, जब भी मैं मणि बनाते और स्थापित करता हूं और आईआरबी (मेरे घर फ़ोल्डर से) चलाने के लिए कोशिश करता हूं;

Errno::ENOENT: No such file or directory - lib/tablecloth/yaml/qty.yaml 

कोड अब ~/lib/मेज़पोश में फ़ाइल के लिए लग रही है ... बल्कि निर्देशिका मणि को स्थापित किया गया है की तुलना में। तो मेरे प्रश्न हैं;

1) मुझे नुस्खा.आरबी की लाइन 27 कैसे बदलनी चाहिए, जैसे कि यह उस फ़ोल्डर में दिख रहा है जिसमें मणि स्थापित है?

2) क्या मैं वास्तव में इस पूरी चीज को गलत तरीके से देख रहा हूं (क्या यह इस तरह से रत्नों के भीतर स्थिर यमल फ़ाइलों का उपयोग करने के लिए भी उपयुक्त है)?

उत्तर

14

खैर सब आप निम्नलिखित तरीके से फ़ाइल का संदर्भ लेना चाहिए की पहली:

file_path = File.join(File.dirname(__FILE__),"yaml/qty.yaml") 
units_hash = YAML.load_file(filepath) 

File.dirname(__FILE__) आप निर्देशिका जिसमें वर्तमान फ़ाइल (recipe.rb) निहित है देता है। File.join फ़ाइलपैथ को सही तरीके से जोड़ता है। इसलिए आपको इसका उपयोग yaml-file संबंधित को recipe.rb फ़ोल्डर में संदर्भित करने के लिए करना चाहिए।

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

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

हालांकि सामान्य परिदृश्य में आपको यह भी ध्यान रखना चाहिए कि वाईएएमएल फ़ाइल में पढ़ना असफल हो सकता है। या

file_path = File.join(File.dirname(__FILE__),"yaml/qty.yaml") 
begin 
    units_hash = YAML.load_file(filepath) 
rescue Psych::SyntaxError 
    $stderr.puts "Invalid yaml-file found, at #{file_path}" 
    exit 1 
rescue Errno::EACCES 
    $stderr.puts "Couldn't access file due to permissions at #{file_path}" 
    exit 1 
rescue Errno::ENOENT 
    $stderr.puts "Couldn't access non-existent file #{file_path}" 
    exit 1 
end 

यदि आप विवरण के बारे में परवाह नहीं है:: तो आपको लगता है कि संभाल करने में सक्षम होना चाहिए

file_path = File.join(File.dirname(__FILE__),"yaml/qty.yaml") 
units_hash =  
    begin 
    YAML.load_file(filepath) 
    rescue Psych::SyntaxError, Errno::EACCES, Errno::ENOENT 
    {} 
    end 
+1

धन्यवाद। सच्चाई बताई जा सकती है, मैंने ऐसा ही एकमात्र कारण यह किया है क्योंकि जिस पुस्तक को मैंने अभी पढ़ा है, वह सुझाव दिया गया है कि यह सर्वोत्तम अभ्यास था (कोड में कोई जादू संख्या नहीं, गैर प्रोग्रामर द्वारा संपादन योग्य आदि) लेकिन मैं आपका मुद्दा और इच्छा लेता हूं शायद इसे किसी बिंदु पर बदलें। –

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