2011-01-08 18 views
54

मैं रेल पर्यावरण में उपयोग के लिए रूबी लिपि लिख रहा हूं, लेकिन मैंने इसे आईआरबी से चलाने का फैसला किया क्योंकि रेल कंसोल को फिर से लोड करना दर्द हो सकता है। अब प्रतीक्षा समय irb से बहुत छोटा है, लेकिन मुझे परेशान है कि मुझे irb को पुनरारंभ करना होगा और हर बार जब मैं कोई परिवर्तन करता हूं तो स्क्रिप्ट की आवश्यकता होती है। क्या irb से एक स्क्रिप्ट को पुनः लोड करने का एक आसान तरीका है?आईआरबी में मैं एक स्क्रिप्ट कैसे पुनः लोड कर सकता हूं?

मुझे this thread में एक विधि मिली, लेकिन यह केवल मणि फ़ाइलों पर लागू होती है। मेरे विवरण की आवश्यकता होती है इस

require "#{File.expand_path(__FILE__)}/../lib/query" 

संपादित की तरह दिखता है: करने की कोशिश की करने के बाद load बजाय require, मैं अभी भी यह काम करने के लिए नहीं मिल सका। मुझे इन त्रुटियों पर रोक नहीं मिल सकती है।

ruby-1.9.2-p0 > load "#{File.expand_path(__FILE__)}/../lib/query.rb" 
LoadError: no such file to load -- /Users/newuser/Dropbox/Sites/rails/hacknyc/(irb)/../lib/query.rb 

उत्तर

84

irb में, File.expand_path(__FILE__)} बस "#{path you ran irb from}/(irb)" वापस आ जाएगा। जो एक पथ बनाता है जो वास्तव में अस्तित्व में नहीं है। सौभाग्य से सभी फ़ाइल पथ इस बात के सापेक्ष हैं कि आपने जहां भी आईआरबी चलाया था। यह आप सभी की जरूरत का मतलब है:

load "lib/query.rb" 

आप एक वास्तविक फ़ाइल में __FILE__ उपयोग करना चाहते हैं, तो ठीक है, लेकिन यह आईआरबी में कोई मान्य पथ निर्माण करने के लिए उम्मीद नहीं है। क्योंकि एक irb पर कोई "फ़ाइल" नहीं है, इसलिए यह वैध पथ वापस नहीं कर सकता है।

इसके अलावा, __FILE__ लोड या आवश्यकता के माध्यम से आईआरबी में लोड की गई फ़ाइल में उपयोग किए जाने पर ठीक काम करेगा। कारण यह है कि यह किस तरह के लिए है।

34
इसके बजाय require का उपयोग करने का

, load प्रयास करें। पूर्व केवल एक बार एक स्रोत फ़ाइल लोड करता है, जबकि बाद में इसे हर बार लोड करते समय इसे लोड किया जाता है।

+1

मैंने लोड करने की कोशिश की लेकिन यह शिकायत करता है कि यह फ़ाइल नहीं ढूंढ पा रहा है, और मैंने लाइन के अंत में आरबी एक्सटेंशन रखा है। – picardo

+0

संदर्भ के लिए, "रूबी आवश्यकता वीएस लोड वीएस वीएस विस्तार शामिल करें" - http://ionrails.com/2009/09/19/ruby_require-vs-load-vs-include-vs-extend/ – Purplejacket

1

मुझे लगता है कि load वह है जिसे आप ढूंढ रहे हैं।

+1

मैंने ' लोड 'लेकिन यह शिकायत करता रहता है कि यह फ़ाइल नहीं ढूंढ पा रहा है, और मैंने लाइन के अंत में आरबी एक्सटेंशन लगाया है। – picardo

+1

फ़ाइल का विस्तार डालने का प्रयास करें – hyeomans

3

this link के अनुसार आपको अपनी फ़ाइल लोड करने और विस्तार को भूलना नहीं है।

यहां this link number 2 पर भी उपयोग करने के लिए एक प्रशंसक संस्करण है जो आपके लिए सहायक भी हो सकता है।

आप अपने रेलवे कंसोल आपके लिए काम क्यों नहीं कर रहे हैं, इस बारे में हैश करना चाहते हैं।

+0

रेल कंसोल लोड करने में बहुत धीमा है। मैंने 'लोड' करने की कोशिश की लेकिन यह शिकायत करता रहता है कि यह फ़ाइल नहीं ढूंढ पा रहा है, और मैंने लाइन के अंत में आरबी एक्सटेंशन लगाया है। – picardo

+0

यदि यह फ़ाइल आपकी lib निर्देशिका के अंदर है, तो यह लोड हो गई है और आप इसका उपयोग करने में सक्षम हो सकते हैं, जब तक कि यह प्रारंभ करने में त्रुटियों को पक्की न करे। इसे किसी अन्य फ़ाइल में उपयोग करने के लिए, आपको अपने रेल ऐप में फ़ाइलों में से किसी एक को 'NameOfModuleOrClass' (वह क्वेरी फ़ाइल के अंदर) की आवश्यकता है। – pjammer

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