2012-11-04 118 views
6

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

在IRB看来,它们加载点播我第一次尝试访问:

Foo::Bar.constants 
=> [] 

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

Foo::Bar.constants 
=> [:ServiceBase, :Service] 

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

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

回答

7

root/config/initializers/eager.rb把本应加载该文件夹中的所有文件名为.rb:

Dir["#{Rails.root}/lib/*.rb"].each {|file| load file} 
+0

不'load'要求文件名?我试过几种方法来加载整个目录,但似乎没有工作。 'LoadError:无法加载这样的文件 - foo' – devth

+0

@devth,请尝试修改答案。 – Mori

+0

这是有效的。谢谢。 – devth

4

对我来说,把这个在application.rb中解决了这个问题

config.eager_load_paths += Dir["#{config.root}/lib/**/"]