2011-12-14 12 views
15

मुझे वर्तमान फ़ोल्डर से फ़ाइल की आवश्यकता कैसे है?रूबी: मौजूदा कामकाजी डीआईआर से फ़ाइल की "आवश्यकता" कैसे करें?

मेरे पास sql_parser.rb नामक एक फ़ाइल है जिसमें एक कक्षा है। मैं एक ही फ़ोल्डर में भी एक और फ़ाइल में इस शामिल करना चाहते हैं, तो मैं प्रयोग किया है:

require 'sql_parser' 

विफल रहता है कि जब मुझे लगता है कि फ़ोल्डर से चलाएँ:

LoadError: no such file to load -- sql_parser 

मैं फ़ोल्डर में आईआरबी का उपयोग कर जहां इस की कोशिश की फ़ाइल मौजूद है और इसे वहां से जरूरी है, लेकिन एक ही समस्या थी।

+1

भी देखें http://stackoverflow.com/questions/2900370/why-does-ruby -1-9-2-हटाने-से-लोड-पथ-और-क्या-विकल्प-वैकल्पिक – knut

उत्तर

2
$LOAD_PATH << Dir.pwd 
require 'sql_parser' 

सुरक्षा कारणों से, @AndrewGrimm द्वारा बताया गया है, तो आप इसके बजाए उपयोग करना चाहिए:

आपका निर्देशिका वर्तमान भार रास्ते में हो गया है। लोड पथ को $LOAD_PATH नामक वैश्विक सरणी में संग्रहीत किया जाता है। यदि आप अपनी वर्तमान निर्देशिका को इसमें जोड़ते हैं, तो आप निर्देशिका के भीतर किसी भी फाइल को लोड करने के लिए उपयोग कर सकते हैं।

बजाय Dir.pwd pwd .chomp के रूप में टिन मनुष्य

ने सुझाव दिया का उपयोग इसके अलावा, मैं require_relative पर इस पसंद करते हैं जब तक आप एक बहुत छोटी परियोजना अन्यथा बातें बदसूरत प्राप्त कर सकते हैं।

+0

चीयर्स। यह काम करता है, लेकिन मैंने सोचा कि रूबी हमेशा पीडब्ल्यूडी में दिखती है, क्या मैं गलत हूं? दुर्भाग्यवश –

+0

@ मैट रॉबर्ट्स नहीं, लेकिन यदि आप रेल ऐप में काम कर रहे हैं तो यह सब आपके लिए संभाला जाता है। – bkempner

+0

@ मैट रॉबर्ट्स: यह रूबी संस्करण पर निर्भर करता है। – knut

3

1.9 पर सिंटैक्स require_relative में बदल गया, क्योंकि इस सवाल के अन्य उत्तरों ने कहा।

यदि आप रुबी 1.8 में लिख रहे हैं, तो मैं आपके कोड को आगे की ओर देखकर और require_relative gem का उपयोग करने का सुझाव देता हूं, ताकि आप इस कीवर्ड का उपयोग अपने रूबी 1.8 में कर सकें और जब आप 1.9 पर जाएं तो एक कम संक्रमणकालीन चीज़ से निपटें।

+0

इस उत्तर समाधान के लिए एक टिप्पणी, नहीं एक जवाब होना चाहिए। –

7

उपयोग

$:.unshift File.join(File.dirname(__FILE__)) 

सुनिश्चित करें कि आप जहां स्क्रिप्ट स्थित है, जहां इस कार्यक्रम से क्रियान्वित किया जा रहा है के बजाय के आधार पर एक रास्ता हो रही है। अन्यथा, आप लोड पथ से "." को हटाकर प्राप्त सुरक्षा लाभ को फेंक रहे हैं।

(हां, निर्देशिका में फ़ाइल की आवश्यकता के बारे में प्रश्नों का शीर्षक स्क्रिप्ट चलाया जा रहा है, लेकिन प्रश्न का मुख्य भाग उल्लेख करता है कि आवश्यक फ़ाइल एक ही फ़ोल्डर में है जैसे स्क्रिप्ट में)

+0

"।" का उपयोग क्यों कर रहा है कम सुरक्षित? इसके अलावा, Dir.pwd क्यों नहीं? (यह अधिक संक्षिप्त है और एक ही बात सिद्ध नहीं?) – bkempner

+0

@bkempner: आप सवाल इस सवाल का टिप्पणी अनुभाग में से जुड़ा हुआ पढ़ा है? –

+0

आह, मैंने अभी किया, धन्यवाद। – bkempner

3

भी ...

की आवश्यकता होती है "./myRubyFile" # नोटिस हम myRubyFile.rb से .rb को बाहर

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