我尝试config.autoload_paths += Dir["#{config.root}/lib/**/"]
和config.eager_load_paths += Dir["#{config.root}/lib/**/"]
,但一直收到uninitialized constant
错误。
我认为这与dependency_loading
被禁用有关,因为config.threadsafe!
现在是Rails 4中的默认值。
那么从/ lib目录中获取/自动加载内容的正确方法和线程安全方法是什么?
更新:/ lib结构
LIB / car.rb:
module Car
CAR_TYPES = %w[volvo saab]
end
LIB /汽车/ volvo.rb:
module Car
class Volvo
end
end
引发的错误是NameError (uninitialized constant Car::CAR_TYPES)
更新2:rails c
:
Car.class
=> Module
Car::CAR_TYPES
=> NameError: uninitialized constant Car::CAR_TYPES
更新3:有趣的是,Car::Volvo.new
有效,但Car :: CAR_TYPES无法引用。
答案 0 :(得分:0)
糟糕。我的应用程序实际上也称为Car,奇怪的是命名空间已经在使用Car.constants => [:Application]
。将module Car
更改为其他内容可解决问题,我可以再次引用Cars::CAR_TYPES
。
由于Car
已定义(application.rb
),因此自动加载甚至不会尝试加载lib/car.rb
。有关详细说明,请参阅https://stackoverflow.com/a/6797707/377920。