Ни 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'