2012-11-04 17 views
6

Es ist wie dieses Problem sieht in Rails 4 gelöst werden: http://blog.plataformatec.com.br/2012/08/eager-loading-for-greater-good/ aber bis dahin, ich frage mich, wie man bestrebt, Lademodule/Klassen in meinem /lib. Eager Laden von Schienen lib

In IRB scheint es, dass sie auf Abruf versuchen, das erste Mal geladen werden, ich Zugang:

Foo::Bar.constants 
=> [] 

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

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

ich in diesem Modul mehrere andere Klassen haben, und mein Code ist abhängig von der Lage, sie zu sehen mit Foo::Bar.const_defined? zur Laufzeit - Wie stelle ich sicher, dass alle Klassen Foo::Bar beim Start geladen werden?

Ich verwende bereits config.autoload_paths += %W(#{config.root}/lib) in application.rb.

Antwort

7

Putting dies in root/config/initializers/eager.rb sollten alle .rb Dateien in diesem Ordner laden:

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

Nicht 'load' a erfordern Dateiname? Ich habe es auf verschiedene Arten versucht, um das gesamte Verzeichnis zu laden, aber es scheint nicht zu funktionieren. 'LoadError: kann solche Datei nicht laden - foo' – devth

+0

@devth, bitte versuchen, überarbeitete Antwort. – Mori

+0

Das funktioniert. Vielen Dank. – devth

4

Für mich in application.rb setzen das Problem gelöst

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