2012-01-16 17 views
35

घर/path_test में/मैं:रूबी लोड हो रहा है config (YAML) स्रोत के रूप में एक ही निर्देशिका में फाइल

load_test.rb:

require 'yaml' 
cnf = YAML::load(File.open('config.yml')) 
puts cnf['Hello'] 

config.yml:

Hello: world!!! 

जब होम/path_test/में मुझे उम्मीद है:

-bash-3.2$ ruby load_test.rb 
world!!! 

जब घर/में (सीडी ..) मैं

-bash-3.2$ ruby path_test/load_test.rb 
path_test/load_test.rb:3:in `initialize': No such file or directory - config.yml  (Errno::ENOENT) 
    from path_test/load_test.rb:3:in `open' 
    from path_test/load_test.rb:3:in `<main>' 

कौन सा सही व्यवहार है, लेकिन नहीं है कि मैं क्या :)

के लिए चाहते थे वहाँ के लिए .yml फ़ाइल रिश्तेदार लोड करने के लिए एक रास्ता है मिल स्रोत फ़ाइल, और मौजूदा कामकाजी डीआईआर के सापेक्ष नहीं ??

समाधान (load_Test.rb):

cnf = YAML::load_file(File.join(File.dirname(File.expand_path(__FILE__)), 'config.yml')) 

संपादित करें:

रूबी 2.0 जब से तुम को सरल बनाने वाली

require 'yaml' 
fn = File.dirname(File.expand_path(__FILE__)) + '/config.yml' 
cnf = YAML::load(File.open(fn)) 
puts cnf['Hello'] 

उत्तर

74

आप से वर्तमान फ़ाइल का रास्ता मिलना चाहिए और उपयोग करें:

cnf = YAML::load_file(File.join(__dir__, 'config.yml')) 
+0

धन्यवाद (एक ')' अंत में बहुत अधिक:]) बस मुझे – FelixHJ

+3

की आवश्यकता है यह पूर्ण समाधान है (स्पष्टता के लिए 2 लाइनों पर विभाजित): 'की आवश्यकता है' yaml ' fn = File.dirname (फ़ाइल .expand_path (__ FILE__)) +'config.yml ' सीएनएफ = वाईएएमएल :: लोड (फ़ाइल.ओपेन (एफएन)) सीएनएफ [' हैलो '] ' – FelixHJ

+0

हम्म डालता है मैं काम करने के लिए स्वरूपण प्राप्त नहीं कर सकता .... – FelixHJ

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