Подтвердить что ты не робот

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

У меня проблема с noob при импорте файлов в 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>'
4b9b3361

Ответ 1

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

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

Ответ 2

Отмечено такое же поведение, но мои корни linux заставили меня попробовать: .\file.rb и он загрузился в irb. Попробуйте явно объявить текущий каталог.

Ответ 3

require './hede'

или

require_relative 'hede'

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

Ответ 4

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

➜ $ irb
> require "#{Dir.pwd}/file_to_load.rb"
=> true 

Ответ 5

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

$: << '.'

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

Ответ 6

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

Ответ 7

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

rvmsudo irb -I '/Absolute/path/to/your/project'