2011-07-19 7 views
5

私はRailsを使用していないことに注意してください。私のようなディレクトリ構造を持っている:ruby​​の親ディレクトリにファイルが必要なのはなぜですか?

foo/ 
bar/ 
base_classes/ 
base_classes.rb 

base_classes.rb:

Dir.glob(File.expand_path(File.join("base_classes/config/constants", "*.rb"))) { |file| require file} 
Dir.glob(File.expand_path(File.join("base_classes", "*.rb"))) { |file| require file} 

私はこのルートディレクトリにいるとき

>> require 'base_classes' #=> true 
>> Card.load! 
[stuff happens] 

しかし、私はFOOにAM /とのいずれかを実行するとき以下:

>> require '../base_classes' #=> true 
>> require File.expand_path("../base_classes.rb") #=> true 
>> require File.expand_path("../base_classes") #=> true 
>> Card.load! 
>> NameError: uninitialized constant Card 

答えて

5

requireは、呼び出されるファイルに基づいており、通常はconfig.ruを意味します。 require_relative(現在のファイルに基づいています)または絶対パスが必要です。

+0

をインクルードは、expand_path作業に含めるべきではないでしょうか。これは絶対パスを作成します。 –

+0

これはすべきですが... require_relative yieldは何ですか? –

4

これは、使用しているルビのバージョンに応じて、一部再生されている可能性があります。
Current directory removed from load path for ruby 1.9.2

私はあなたの問題は、この行である疑いがある:require '../base_classes'ときfoo/インチ
代わりにrequire_relative '../base_classes'を試してみて、何が起こるかを見てください。

これは、で、ルビー1.9.2を使用していることを前提としています。そうでない場合は、より深く掘り下げる必要があるかもしれません。あなたは実行しているRubyのバージョンを質問するか、その中に言及するか(あるいはその両方、好ましくは両方)するべきです。必要とされたことのすべてではなく、2つのドットの単一のドットを使用していた

Dir.glob(File.join(File.dirname(__FILE__), 'base_classes/config/constants', "*.rb")) { |file| require file} 
Dir.glob(File.join(File.dirname(__FILE__), 'base_classes', "*.rb")){ |file| require file} 
0

問題がbase_classes.rbの内側に実際にいた、私のようなファイルを必要とする必要がありました。与えられたコード例に基づいて

require File.expand_path("./base_classes.rb") 
1

関連する問題