2012-02-06 2 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 

в IRB я получаю:

>> 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. Может ли это быть причиной?

Спасибо!

UPDATE Weird, когда я типа 'ставит RUBY_VERSION' в IRB, я получаю это:

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

Что делать, если вы просто «требуете» st''? –

+0

@MatthewLehner То же самое – 0xSina

+0

Возможный дубликат [Почему не текущий каталог на моем пути Ruby?] (Http://stackoverflow.com/questions/4965556/why-isnt-current-directory-on-my-ruby-path); см. мой ответ в этом вопросе для обходных решений. – Phrogz

ответ

16

Каталог, в котором st.rb живет, скорее всего, не на вашем пути загрузки.

Предполагая, что 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 

EDIT К сожалению, я полностью пропустил тот факт, что вы используете рубиновый 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

8

Проблема должна быть решена, если вы укажете свой путь.

например.

"требуют 'st.rb'" -> "требуют './st.rb'"

Смотрите, если ваша проблема разрешится или нет.

+0

Thx. Я столкнулся с проблемой при работе над образцами AWS. На самом деле, если мы попытались сопоставить версию ruby ​​с образцом кода, проблема может исчезнуть. –

1

Я просто столкнулся с подобной проблемой. Попробуйте

require './st.rb' 

Это должно сделать трюк.

Смежные вопросы