2012-11-04 16 views
6

wygląda jak ten problem zostanie rozwiązany w Rails 4: http://blog.plataformatec.com.br/2012/08/eager-loading-for-greater-good/ ale do tego czasu, zastanawiam się, jak chętnie obciążenia modułów/klas w moim /lib.Marzą załadunku szyn lib

W IRB wydaje się, że są one ładowane na żądanie po raz pierwszy próbuję dostępu:

Foo::Bar.constants 
=> [] 

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

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

mam kilka innych klas w tym module, a mój kod zależy na byciu w stanie spojrzeć je przy użyciu Foo::Bar.const_defined? w czasie wykonywania - w jaki sposób mogę załadować wszystkie klasy Foo::Bar podczas uruchamiania?

Używam już config.autoload_paths += %W(#{config.root}/lib) w application.rb.

Odpowiedz

7

Wyrażając to root/config/initializers/eager.rb należy załadować wszystkie pliki .rb w tym folderze:

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

Nie 'load' wymagałoby Nazwa pliku? Próbowałem go na kilka sposobów, aby załadować cały katalog, ale nie działa. 'LoadError: nie można załadować takiego pliku - foo' – devth

+0

@devth, spróbuj zmienić poprawioną odpowiedź. – Mori

+0

To działa. Dzięki. – devth

4

Dla mnie to oddanie w environment.rb rozwiązał problem

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