JP Silvashy JP Silvashy - 7 months ago 11
Ruby Question

Understanding Ruby's load paths

I'm a little confused about why my project can't load the files it needs, it's a really simple project tree:

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


and my
processor.rb
file looks like

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

class Processor

end


And just for testing it that file mapper looks like:

class Mapper
def run
puts "running map"
end
end


But running
ruby lib/processor.rb
results in:

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

Answer

Ruby's $LOAD_PATH will not include your lib directory by default (even though that's where the file you're running is located).

You can either tell the ruby interpreter to include it:

ruby -Ilib lib/processor.rb

Or you can add the lib folder to the load path:

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