2012-11-04 17 views
6

Sembra che questo problema verrà risolto in Rails 4: http://blog.plataformatec.com.br/2012/08/eager-loading-for-greater-good/ ma fino ad allora, mi chiedo come ansioso-caricare i moduli/classes nel mio /lib.eager loading di rotaie lib

In IRB sembra che vengono caricati on-demand la prima volta che provo ad accedere:

Foo::Bar.constants 
=> [] 

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

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

ho diverse altre classi in quel modulo, e il mio codice dipende dalla capacità di guardare in su utilizzando Foo::Bar.const_defined? in fase di runtime: come posso garantire che tutte le classi di Foo::Bar vengano caricate all'avvio?

Sto già utilizzando config.autoload_paths += %W(#{config.root}/lib) in application.rb.

risposta

7

Mettendo questo in root/config/initializers/eager.rb dovrebbe caricare tutti i file in quella cartella .RB:

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

non Vuol 'load' richiedono un nome del file? Ho provato in vari modi per caricare l'intera dir ma non sembra funzionare. 'LoadError: impossibile caricare tale file - foo' – devth

+0

@devth, prova la risposta modificata. – Mori

+0

Che funziona. Grazie. – devth

4

Per me mettere questo nel application.rb risolto il problema

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