8

请注意,我没有使用 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

4 回答 4

6

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

于 2011-07-19T20:12:08.033 回答
4

这可能会起作用,具体取决于您使用的 ruby​​ 版本。
从 ruby​​ 1.9.2 的加载路径中删除当前目录

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

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

于 2011-07-19T20:36:58.367 回答
1

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

基于给定的示例代码:

require File.expand_path("./base_classes.rb")
于 2011-09-19T12:40:45.060 回答
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}
于 2011-07-19T20:57:43.947 回答