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


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

processor/
  bin/
  lib/
    processor.rb
    processor/
      mapper.rb
      reducer.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>'    
3 54

3 ответа:

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

вы можете сказать ruby переводчик, чтобы включить его:

ruby -Ilib lib/processor.rb

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

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

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

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

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

использовать Руби require_relative в этом случае:

require_relative "processor/mapper"