Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

load works on local path, require doesn't

Tags:

loadee.rb

puts '> This is the second file.' 

loaddemo.rb

puts 'This is the first (master) program file.' load 'loadee.rb' puts 'And back again to the first file.' 

When I run "ruby loaddemo.rb", This works fine. Both files are in the same directory, and that's the directory I run from.

But if I change the load to a require, and with or without the extension I get:

<internal:lib/rubygems/custom_require>:29:in `require': no such file to load  -- loadee.rb (LoadError)         from <internal:lib/rubygems/custom_require>:29:in `require'         from loaddemo.rb:2:in `<main>' 

My question is of course, why isn't require working in this case? It should, right? Do load and require use different paths?

Ruby version 1.9.2

like image 611
Benjamin Lindley Avatar asked May 13 '11 23:05

Benjamin Lindley


2 Answers

If you provide just a filename to require, it will only look in the predefined $LOAD_PATH directories. However, if you provide a path with your filename, it should work:

puts 'This is the first (master) program file.' require './loadee.rb' puts 'And back again to the first file.' 

You could also add your project's folder to the load path instead:

$LOAD_PATH.unshift File.dirname(__FILE__) puts 'This is the first (master) program file.' require 'loadee.rb' puts 'And back again to the first file.' 

And last, you could just use require_relative instead:

puts 'This is the first (master) program file.' require_relative 'loadee.rb' puts 'And back again to the first file.' 
like image 82
Dylan Markow Avatar answered Sep 23 '22 08:09

Dylan Markow


Providing a path with the filename seemed not to work for me, and I didn't want to cram a bunch of paths into my $LOAD_PATH.

Checking out the documentation, I found require_relative.

require_relative 'loadee' 

Works in both 1.9.2 and 2.1.2.

The documentation indicates that require is not intended to search relative paths at all, and neither is load.

like image 43
Keen Avatar answered Sep 21 '22 08:09

Keen