Понимание путей загрузки 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>'
Ответы
Ответ 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"