Rubyでファイルをインポートするのに本当に問題があります。 WindowsXPでRubyアプリを作成しています。アプリのすべてのクラスファイルは"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
require './hede'
または
require_relative 'hede'
これは、LinuxのRuby(1.9.3)とJRuby(1.7.x)の両方で機能します。Windowsではテストしていません。
同じ振る舞いに気づきましたが、私のLinuxのルーツは私に試してもらいました:.\file.rb
そしてそれはirbにロードされました。現在のディレクトリを明示的に宣言してみてください。
このコマンドはどうですか?書くのは少し面倒ですが、本当にきれいで、常に機能するはずです:
➜$ irb > require "#{Dir.pwd} /file_to_load.rb" => true
ひどく汚いですが、最初の行でいつでも行うことができます:
$: << '.'
そして、あなたはpwd'edrequireで行きます。 IRBを使用したインタラクティブ/クリエイティブテストに非常に役立ちます
以前の投稿は両方とも、用途が異なるだけで正しいと思います。 IRBでは、require
で絶対パスを使用します。ファイルでは、絶対パスでrequire
を使用するか、require_relative
を使用することもできます。
あなたがrvmsudoでこれをやろうとしているなら、私はこれが私のために働いているのを見つけました:
rvmsudo irb -I '/Absolute/path/to/your/project'