Ответ 1
Никто из них не работал у меня, но это делало:
irb -I .
>require 'file'
=> true
У меня проблема с 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>'
Никто из них не работал у меня, но это делало:
irb -I .
>require 'file'
=> true
Отмечено такое же поведение, но мои корни linux заставили меня попробовать: .\file.rb
и он загрузился в irb. Попробуйте явно объявить текущий каталог.
require './hede'
или
require_relative 'hede'
Это работает для меня как в Ruby (1.9.3), так и в JRuby (1.7.x) на linux. Я не тестировал его на окнах.
Как насчет этой команды? Немного громоздко писать, но действительно чистить, и он всегда должен работать:
➜ $ irb > require "#{Dir.pwd}/file_to_load.rb" => true
Это чертовски грязно, но вы всегда можете сделать это на самой первой строке:
$: << '.'
и вы заходите с требованием pwd'ed. Это очень полезно для интерактивного/творческого тестирования с IRB
Я считаю, что оба предыдущих сообщения верны, только для разных целей. В IRB используйте абсолютный путь с require
, с файлом вы также можете использовать require
с абсолютным путем или использовать require_relative
.
Если вы пытаетесь сделать это с помощью rvmsudo, я обнаружил, что это сработало для меня:
rvmsudo irb -I '/Absolute/path/to/your/project'