Подтвердить что ты не робот

Ruby LoadError: невозможно загрузить такой файл

Когда мне нужен файл, например (называемый st.rb):

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 Странно, когда я печатаю 'puts 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!
>> 
4b9b3361

Ответ 1

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

Предполагая, что st.rb находится в каталоге с именем lib относительно того, где вы вызываете irb, вы можете добавить этот каталог lib в список каталогов, которые ruby ​​использует для загрузки классов или модулей с помощью этого:

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

ИЗМЕНИТЬ Извините, я полностью упустил тот факт, что вы используете ruby ​​1.9.x. Все учетные записи сообщают, что ваш текущий текущий рабочий каталог был удален из LOAD_PATH из соображений безопасности, поэтому вам нужно будет сделать что-то вроде irb:

$: << "."

Ответ 3

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

например.

"require 'st.rb'" → "require". /st.rb '"

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

Ответ 4

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

require './st.rb'

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

Ответ 5

Я создал свой Gem, но сделал это в каталоге, который не указан в моем пути загрузки:

$ pwd
/Users/myuser/projects
$ gem build my_gem/my_gem.gemspec

Затем я запустил irb и попытался загрузить Gem:

> require 'my_gem'
LoadError: cannot load such file -- my_gem

Я использовал глобальную переменную $: для проверки пути загрузки и понял, что использую RVM. И у rvm есть определенные каталоги в моем пути загрузки $: Ни один из этих каталогов не включал мой каталог ~/projects, где я создал пользовательский гем.

Поэтому одним из решений является изменение самого пути загрузки:

$: << "/Users/myuser/projects/my_gem/lib"

Обратите внимание, что каталог lib находится по пути, в котором содержится файл my_gem.rb, который потребуется в irb:

> require 'my_gem'
 => true 

Теперь, если вы хотите установить гем в RVM-пути, вам нужно выполнить:

$ gem install my_gem

Но это должно быть в репозитории, например rubygems.org.

$ gem push my_gem-0.0.0.gem
Pushing gem to RubyGems.org...
Successfully registered gem my_gem