Note that I am not using Rails. I have a directory structure like:
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}
when I am in this root directory
>> require 'base_classes' #=> true
>> Card.load!
[stuff happens]
But when I am in foo/ and do either of the following:
>> 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
require
is based on the file that gets called, which usually means config.ru
. You need require_relative
(which is based on the current file), or an absolute path.
This may be playing a part, depending on which version of ruby you're using.
Current directory removed from load path for ruby 1.9.2
I suspect your problem is this line: require '../base_classes'
when in foo/
.
Try require_relative '../base_classes'
instead and see what happens.
This is assuming you are using ruby 1.9.2. If not, may need to dig deeper. You should tag the question or mention in it (or both, preferrably) which version of ruby you're running.
All that was needed was to use a single dot instead of two dots.
Based on the given example code:
require File.expand_path("./base_classes.rb")
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With