2011-07-19 70 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] 

但是,當我在富/和操作之一如下:

>> 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產量是多少? –

4

這可能是玩的一部分,取決於您使用的是哪個版本的ruby。
Current directory removed from load path for ruby 1.9.2

我懷疑你的問題是這一行:require '../base_classes'foo/時。
嘗試使用require_relative '../base_classes',看看會發生什麼。

這是假設你使用紅寶石1.9.2。如果不是,可能需要深入挖掘。你應該在問題中提出問題或者提及(或者兩者兼而有之)你正在運行的是哪個版本的ruby。

0

的問題是實際上base_classes.rb裏面,我需要像需要的文件:

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} 
1

所有這一切都需要的是用一個點而不是兩個點。

基礎上給出的示例代碼:

require File.expand_path("./base_classes.rb") 
相關問題