如何以线程安全的方式加载/ lib中的东西?

时间:2013-11-26 22:26:44

标签: ruby-on-rails-4 autoload rails-api

我尝试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无法引用。

1 个答案:

答案 0 :(得分:0)

糟糕。我的应用程序实际上也称为Car,奇怪的是命名空间已经在使用Car.constants => [:Application]。将module Car更改为其他内容可解决问题,我可以再次引用Cars::CAR_TYPES

由于Car已定义(application.rb),因此自动加载甚至不会尝试加载lib/car.rb。有关详细说明,请参阅https://stackoverflow.com/a/6797707/377920