为什么我不能在ruby的父目录中需要一个文件?

时间:2011-07-19 20:09:54

标签: ruby require load-path

请注意,我没有使用Rails。我有一个目录结构,如:

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 /并执行以下任一操作时:

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

4 个答案:

答案 0 :(得分:6)

require基于被调用的文件,通常表示config.ru。您需要require_relative(基于当前文件)或绝对路径。

答案 1 :(得分:4)

这可能正在发挥作用,具体取决于您使用的红宝石版本 Current directory removed from load path for ruby 1.9.2

我怀疑你的问题是这一行:require '../base_classes'foo/ 请尝试require_relative '../base_classes',看看会发生什么。

这假设 使用ruby 1.9.2。如果没有,可能需要深入挖掘。你应该在其中标记问题或提及(或两者,最好)你正在运行的ruby版本。

答案 2 :(得分:1)

所需要的只是使用一个点而不是两个点。

基于给定的示例代码:

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

答案 3 :(得分: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}