渴望加载rails lib

dev*_*vth 7 ruby ruby-on-rails

看起来这个问题将在Rails 4中解决:http: //blog.plataformatec.com.br/2012/08/eager-loading-for-greater-good/但在那之前,我想知道如何渴望 -加载我的模块/类/lib.

在IRB中,它似乎是我第一次尝试访问时按需加载:

Foo::Bar.constants
=> []

Foo::Bar::Service
=> Foo::Bar::Service

Foo::Bar.constants
=> [:ServiceBase, :Service]
Run Code Online (Sandbox Code Playgroud)

我在该模块中有其他几个类,我的代码依赖于能够Foo::Bar.const_defined?在运行时查找它们- 我如何确保Foo::Bar在启动时加载所有类?

我已经config.autoload_paths += %W(#{config.root}/lib)在使用了application.rb.

Mor*_*ori 8

root/config/initializers/eager.rb放入此应该加载该文件夹中的所有.rb文件:

Dir["#{Rails.root}/lib/*.rb"].each {|file| load file}
Run Code Online (Sandbox Code Playgroud)

  • 刚刚意识到初始化程序在开发环境中为第一个请求加载它们,但后续请求并不急于加载类.您如何为开发中的每个请求急切加载它们? (2认同)
  • Dir [Rails.root.join("lib/*.rb")]看起来更好:) (2认同)

小智 6

我把这个放在application.rb解决了这个问题

config.eager_load_paths += Dir["#{config.root}/lib/**/"]
Run Code Online (Sandbox Code Playgroud)