30

I'm having a really noob problem with importing files in Ruby. I'm making a Ruby app in Windows XP. All the class files for the app are in "C:/Documents/Prgm/Surveyor_Ruby/lib". But when I require a file in another file, neither ruby nor irb can find the required file.

The current directory's contents:

C:\Documents\Prgm\Surveyor_Ruby\lib>dir
 Volume in drive C has no label.
 Volume Serial Number is AAAA-BBBB

 Directory of C:\Documents\Prgm\Surveyor_Ruby\lib

10/09/2010  06:32 PM    <DIR>          .
10/09/2010  06:32 PM    <DIR>          ..
10/08/2010  03:22 PM             5,462 main (commented).rb
10/08/2010  03:41 PM                92 question.rb
10/08/2010  09:06 PM             2,809 survey.rb
10/09/2010  06:25 PM               661 surveyor.rb
10/08/2010  01:39 PM             1,546 test.rb
               5 File(s)         10,570 bytes
               2 Dir(s)  40,255,045,632 bytes free

Confirmation that irb is in correct directory:

C:\Documents\Prgm\Surveyor_Ruby\lib>irb
irb(main):001:0> Dir.pwd
=> "C:/Documents/Prgm/Surveyor_Ruby/lib"

...yet irb can't load survey.rb:

irb(main):002:0> require 'survey'
LoadError: no such file to load -- survey
        from <internal:lib/rubygems/custom_require>:29:in `require'
        from <internal:lib/rubygems/custom_require>:29:in `require'
        from (irb):2
        from C:/Ruby192/bin/irb:12:in `<main>'
Nakilon
  • 34,866
  • 14
  • 107
  • 142
Bad Request
  • 3,990
  • 5
  • 33
  • 37
  • 2
    In addition to the top solution, `require './survey'` would also have worked. Basically your current directory isn't actually in the search path by default, so you have to either point ruby to it explicitly, or include it in the search path. – Bad Request Sep 26 '13 at 15:33

7 Answers7

65

None of these worked for me, but this did:

irb -I .
>require 'file'
 => true
AdrianoFerrari
  • 2,129
  • 1
  • 18
  • 14
  • Check also my solution, it's especially fine when you didn't fire up irb with `-I .` to set the `pwd` as the `$LOAD_PATH` directory. – Darme Oct 06 '12 at 11:43
  • Wonderful feature of `irb`! – Dan Aug 27 '13 at 05:33
  • @DanKozlowski More like, bad design of Ruby! In Python, the current directory is added to PATH by default. – Pramod Apr 12 '16 at 19:09
11
require './hede'

or

require_relative 'hede'

This works for me in both Ruby (1.9.3) and JRuby (1.7.x) on linux. I haven't tested it on windows.

nurettin
  • 11,090
  • 5
  • 65
  • 85
10

How about this command? A little cumbersome to write but really clean and it should always work:

➜ $ irb
> require "#{Dir.pwd}/file_to_load.rb"
=> true 
Darme
  • 6,984
  • 5
  • 37
  • 52
8

Noticed the same behavior but my linux roots had me try:.\file.rb and it loaded into the irb. Try explicitly declaring the current directory.

bpd1069
  • 81
  • 2
3

it's damn dirty, but you can always do at the very first line:

$: << '.'

and off you go with pwd'ed require. It's quite useful for interactive/creative testing with IRB

Andrew Grimm
  • 78,473
  • 57
  • 200
  • 338
quetzalcoatl
  • 32,194
  • 8
  • 68
  • 107
2

I believe both of the previous posts are correct, just for different uses. In IRB use an absolute path with require, with a file you can also use require with an absolute path, or use require_relative.

1

If you're trying to do this with rvmsudo, I found this worked for me:

rvmsudo irb -I '/Absolute/path/to/your/project'
jonsca
  • 10,218
  • 26
  • 54
  • 62
awsmsce
  • 187
  • 9