2012-02-06 15 views
19

जब मैं एक फ़ाइल (उदाहरण के लिए कहा जाता है st.rb) की आवश्यकता होती है:माणिक LoadError: इस तरह के फ़ाइल लोड नहीं कर सकता

require 'rubygems' 
require 'mongrel' 

class TestHandler < Mongrel::HttpHandler 

    def process(request, response) 
    response.start(200) do |head, out| 
     head["Content-Type"] = "text/html" 
     out.write "Hello, World!\n" 
    end 
    end 

end 

आईआरबी में मुझे मिलता है:

>> require 'st.rb' 
LoadError: cannot load such file -- st.rb 
    from /usr/local/lib/ruby/1.9.1/rubygems/custom_require.rb:36:in `require' 
    from /usr/local/lib/ruby/1.9.1/rubygems/custom_require.rb:36:in `require' 
    from (irb):3 
    from /usr/local/bin/irb:12:in `<main>' 

मैं एक सुराग हो सकता है, लेकिन यह सिर्फ एक अनुमान है। मेरे गहरे लाल रंग का संस्करण/स्थापित स्थान है:

/usr/local/bin/ruby और ruby 1.9.3p0

अभी तक, माणिक रत्न /usr/local/lib/ruby/1.9.1 में है और यह संस्करण 1.9.1 के बारे में बात कर रहा है। क्या यह संभवतः कारण हो सकता है?

धन्यवाद!

puts RUBY_VERSION 
1.9.3 
NoMethodError: undefined method `write' for nil:NilClass 
    from /usr/local/lib/ruby/1.9.1/irb.rb:311:in `printf' 
    from /usr/local/lib/ruby/1.9.1/irb.rb:311:in `output_value' 
    from /usr/local/lib/ruby/1.9.1/irb.rb:160:in `block (2 levels) in eval_input' 
    from /usr/local/lib/ruby/1.9.1/irb.rb:273:in `signal_status' 
    from /usr/local/lib/ruby/1.9.1/irb.rb:156:in `block in eval_input' 
    from /usr/local/lib/ruby/1.9.1/irb/ruby-lex.rb:243:in `block (2 levels) in each_top_level_statement' 
    from /usr/local/lib/ruby/1.9.1/irb/ruby-lex.rb:229:in `loop' 
    from /usr/local/lib/ruby/1.9.1/irb/ruby-lex.rb:229:in `block in each_top_level_statement' 
    from /usr/local/lib/ruby/1.9.1/irb/ruby-lex.rb:228:in `catch' 
    from /usr/local/lib/ruby/1.9.1/irb/ruby-lex.rb:228:in `each_top_level_statement' 
    from /usr/local/lib/ruby/1.9.1/irb.rb:155:in `eval_input' 
    from /usr/local/lib/ruby/1.9.1/irb.rb:70:in `block in start' 
    from /usr/local/lib/ruby/1.9.1/irb.rb:69:in `catch' 
    from /usr/local/lib/ruby/1.9.1/irb.rb:69:in `start' 
    from /usr/local/bin/irb:12:in `<main>' 
Maybe IRB bug! 
>> 
+0

क्या होगा यदि आपको केवल 'आवश्यकता' की आवश्यकता है? –

+0

@MatthewLehner एक ही चीज़ – 0xSina

+0

संभावित रूप्लिक [मेरे रूबी पथ पर वर्तमान निर्देशिका क्यों नहीं है?] (Http://stackoverflow.com/questions/4965556/why-isnt-current-directory-on-my-ruby-path); कामकाज के लिए उस सवाल में मेरा जवाब देखें। – Phrogz

उत्तर

16

निर्देशिका जहां st.rb जीवन सबसे अधिक संभावना अपनी लोड रास्ते पर नहीं है:

अद्यतन अजीब है, जब मैं टाइप आईआरबी में 'कहते हैं RUBY_VERSION', मैं इस मिलता है।

यह मानते हुए कि st.rb नाम वाली निर्देशिका lib तुम कहाँ आह्वान irb के सापेक्ष में स्थित है, आप जोड़ सकते हैं कि निर्देशिका की सूची में lib निर्देशिका कि माणिक इस के साथ वर्ग या मॉड्यूल लोड करने के लिए उपयोग करता है:

$: << 'lib' 

उदाहरण के लिए, 'foobar' (foobar.rb) नामक मॉड्यूल को कॉल करने के लिए जो lib निर्देशिका में रहता है, मुझे पहले लोड पथ की सूची में lib निर्देशिका जोड़नी होगी। यहाँ, मैं सिर्फ अपनी लोड पथ के लिए lib निर्देशिका जोड़कर हूँ:

irb(main):001:0> require 'foobar' 
LoadError: no such file to load -- foobar 
     from /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:36:in `gem_original_require' 
     from /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:36:in `require' 
     from (irb):1 
irb(main):002:0> $: 
=> ["/usr/lib/ruby/gems/1.8/gems/spoon-0.0.1/lib", "/usr/lib/ruby/gems/1.8/gems/interactive_editor-0.0.10/lib", "/usr/lib/ruby/site_ruby/1.8", "/usr/lib/ruby/site_ruby/1.8/i386-cygwin", "/usr/lib/ruby/site_ruby", "/usr/lib/ruby/vendor_ruby/1.8", "/usr/lib/ruby/vendor_ruby/1.8/i386-cygwin", "/usr/lib/ruby/vendor_ruby", "/usr/lib/ruby/1.8", "/usr/lib/ruby/1.8/i386-cygwin", "."] 
irb(main):004:0> $: << 'lib' 
=> ["/usr/lib/ruby/gems/1.8/gems/spoon-0.0.1/lib", "/usr/lib/ruby/gems/1.8/gems/interactive_editor-0.0.10/lib", "/usr/lib/ruby/site_ruby/1.8", "/usr/lib/ruby/site_ruby/1.8/i386-cygwin", "/usr/lib/ruby/site_ruby", "/usr/lib/ruby/vendor_ruby/1.8", "/usr/lib/ruby/vendor_ruby/1.8/i386-cygwin", "/usr/lib/ruby/vendor_ruby", "/usr/lib/ruby/1.8", "/usr/lib/ruby/1.8/i386-cygwin", ".", "lib"] 
irb(main):005:0> require 'foobar' 
=> true 

संपादित क्षमा करें, मैं पूरी तरह से तथ्य यह है कि आप गहरे लाल रंग का प्रयोग कर रहे हैं 1.9.x. याद किया सभी खातों की रिपोर्ट है कि अपने current working directory has been removed from LOAD_PATH for security reasons है, तो आप irb में की तरह कुछ करना होगा:

$: << "." 
+0

मैं वर्तमान में निर्देशिका में cd'ed हूँ जिसमें st.rb रहता है। यह कल तक ठीक काम कर रहा था जब मैंने रूबी को 1.9.3 – 0xSina

11

सुरक्षा & अन्य कारणों से, गहरे लाल रंग का डिफ़ॉल्ट रूप से नहीं है load_path में वर्तमान निर्देशिका में शामिल हैं। आप इसे अधिक जानकारी के लिए जांचना चाह सकते हैं - Why does Ruby 1.9.2 remove "." from LOAD_PATH, and what's the alternative?

8

यदि आप अपना रास्ता निर्दिष्ट करते हैं तो समस्या हल हो जाएगी।

उदा।

" 'st.rb' की आवश्यकता होती है" ->

देखें कि कहीं आपके समस्या हल हो या नहीं हो " './st.rb' की आवश्यकता होती है"।

+0

Thx में अपग्रेड करने का निर्णय लिया। एडब्ल्यूएस के नमूने पर काम करते समय मैं समस्या के माध्यम से आया था। असल में, अगर हमने नमूना कोड के दौरान रूबी के संस्करण से मिलान करने का प्रयास किया, तो समस्या गायब हो सकती है। –

1

मैं अभी भी इसी तरह की समस्या में आया हूं।

require './st.rb' 

यह चाल चलाना चाहिए।

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

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