2012-02-06 15 views
19

Kiedy wymaga pliku, na przykład (tzw st.rb):rubin LoadError: nie można załadować taki plik

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 

w IRB uzyskać:

>> 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>' 

może mam pojęcia, ale to tylko domysły. Moja wersja Ruby/zainstalować lokalizacja to:

/usr/local/bin/ruby i ruby 1.9.3p0

jeszcze, ruby ​​klejnoty w /usr/local/lib/ruby/1.9.1 i to mówimy o wersji 1.9.1. Czy to może być powód?

Dzięki!

UPDATE dziwne, gdy wpisuję 'stawia RUBY_VERSION' w IRB, otrzymuję to:

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

co, jeśli po prostu "potrzebujesz" st''? –

+0

@MatthewLehner to samo – 0xSina

+0

Możliwy duplikat [Dlaczego nie jest aktualny katalog na mojej ścieżce Ruby?] (Http://stackoverflow.com/questions/4965556/why-isnt-current-directory-on-my-ruby-path); zobacz moją odpowiedź w tym pytaniu na obejścia. – Phrogz

Odpowiedz

16

Katalog, w którym st.rb życie to najprawdopodobniej nie na swojej drodze obciążenia.

Zakładając, że st.rb znajduje się w katalogu o nazwie lib stosunku do którego powoływać irb, można dodać, że lib katalog do listy katalogów, które rubin wykorzystuje załadować zajęcia lub moduły z tym:

$: << 'lib' 

Na przykład, aby wywołać moduł o nazwie "foobar" (foobar.rb), który znajduje się w katalogu lib, należy najpierw dodać katalog lib do listy ścieżki ładowania. Tutaj jestem po prostu dodanie do katalogu lib na mojej ścieżce obciążenia:

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 

EDIT Niestety, ja zupełnie nie wykorzystuje fakt, że używasz rubinowy 1.9.x. Wszystkie rachunki zgłosić, że current working directory has been removed from LOAD_PATH for security reasons, więc trzeba będzie zrobić coś podobnego w irb:

$: << "." 
+0

Obecnie jestem na CD'ed do katalogu, w którym znajduje się st.rb. To działało dobrze do wczoraj, kiedy zdecydowałem się ulepszyć ruby ​​do 1.9.3 – 0xSina

8

Problem zostanie rozwiązany, jeśli podasz ścieżkę.

np.

"require 'st.rb'" -> "require './st.rb'"

sprawdzić, czy problem się rozwiązał, czy nie.

+0

Thx. Przeszedłem przez ten problem podczas pracy nad próbkami AWS. W rzeczywistości, jeśli spróbujemy dopasować wersję ruby, gdy przykładowy kod, problem może zniknąć. –

1

Po prostu napotkałem podobny problem. Wypróbuj

require './st.rb' 

To powinno wystarczyć.

Powiązane problemy