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

Понимание путей загрузки Ruby

Я немного смущен тем, почему мой проект не может загрузить нужные ему файлы, это действительно простое дерево проекта:

processor/
  bin/
  lib/
    processor.rb
    processor/
      mapper.rb
      reducer.rb

и мой processor.rb файл выглядит как

require 'processor/mapper'
require 'processor/reducer'

class Processor

end

И только для тестирования, что файл mapper выглядит следующим образом:

class Mapper
  def run
    puts "running map"
  end
end

Но запуск ruby lib/processor.rb приводит к:

<internal:lib/rubygems/custom_require>:29:in `require': no such file to load -- processor/mapper (LoadError)
    from <internal:lib/rubygems/custom_require>:29:in `require'
    from lib/processor.rb:3:in `<class:Processor>'
    from lib/processor.rb:2:in `<main>'    
4b9b3361

Ответ 1

Ruby $LOAD_PATH не будет включать ваш каталог lib по умолчанию (даже если там, где находится файл, который вы используете).

Вы можете либо сообщить интерпретатору ruby, чтобы включить его:

ruby -Ilib lib/processor.rb

Или вы можете добавить папку lib в путь загрузки:

$LOAD_PATH.unshift(File.dirname(__FILE__))
require  'processor/mapper'
...

Ответ 2

Ruby 1.9 больше не включает "." в пути загрузки. Сделайте require "#{File.dirname(__FILE__)}/processor/mapper" или используйте require_relative.

Вы всегда можете определить текущий путь загрузки, проверив $LOAD_PATH (или $:)

(отредактировано: $LOAD_PATH не $: LOAD_PATH)

Ответ 3

Используйте Ruby require_relative в этом случае:

require_relative "processor/mapper"