Ни ruby, ни irb не могут загрузить файл.rb в текущий каталог

У меня проблема с импортом файлов в Ruby. Я делаю приложение Ruby в Windows XP. Все файлы классов для приложения находятся в "C:/Documents/Prgm/Surveyor_Ruby/lib", Но когда я require файл в другом файле, ни ruby, ни irb не могут найти нужный файл.

Текущее содержимое каталога:

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

Подтверждение, что irb находится в правильном каталоге:

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

... но irb не может загрузить 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>'

7 ответов

Ни один из них не работал для меня, но это сделало:

irb -I .
>require 'file'
 => true
require './hede'

или же

require_relative 'hede'

Это работает для меня как в Ruby (1.9.3), так и в JRuby (1.7.x) в Linux. Я не проверял это на окнах.

Как насчет этой команды? Немного громоздко писать, но очень чисто, и это всегда должно работать:

Ir $ irb
> требуют "#{Dir.pwd}/file_to_load.rb"
=> правда 

Заметил то же поведение, но мои Linux-корни заставили меня попробовать:.\file.rb и он загрузился в IRB. Попробуйте явно объявить текущий каталог.

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

$: << '.'

и вы идете с pwd'ed требуют. Это очень полезно для интерактивного / креативного тестирования с IRB

Я считаю, что оба предыдущих поста верны, только для разных целей. В IRB используйте абсолютный путь с require, с файлом вы также можете использовать require с абсолютным путем, или использовать require_relative,

Если вы пытаетесь сделать это с помощью rvmsudo, я обнаружил, что это работает для меня:

rvmsudo irb -I '/Absolute/path/to/your/project'
Другие вопросы по тегам