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

Jer*_*ith 8 ruby require load-path

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

foo/
bar/
base_classes/
base_classes.rb
Run Code Online (Sandbox Code Playgroud)

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}
Run Code Online (Sandbox Code Playgroud)

当我在这个根目录

>> require 'base_classes' #=> true
>> Card.load!
[stuff happens]
Run Code Online (Sandbox Code Playgroud)

但是,当我在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
Run Code Online (Sandbox Code Playgroud)

Den*_*rdy 6

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