2010-01-12 11 views
7

Tengo un problema desconcertante con respecto a los módulos definidos en el directorio librieles lib incluye

Tengo dos archivos

#lib/authentication.rb 

module Authentication 

end 


#lib/test_module.rb 

module TestModule 

end 

En mi controlador de aplicación tengo

class ApplicationController < ActionController::Base 
    include Authentication 
    include TestModule 
end 

carga el módulo de autenticación correctamente, pero el TestModule no

Me sale "constante no inicializada" ApplicationController :: TestModule "

Estoy perplejo ... ¿Alguien?

EDITAR: ¿Alguien sabe dónde podría buscar para depurar esto?

+0

Pregunta tonta, pero ¿reinició su servidor? Si no, ¿reiniciar el proceso arreglarlo? –

+0

yup Intenté reiniciar. El servidor no se inicia después. – stellard

Respuesta

5

Adición require 'lib/test_module' en la parte superior de su archivo ApplicationController podría ayudar

+2

Probé eso y esto es lo que obtuve no hay tal archivo para cargar - lib/test_module (MissingSourceFile) – stellard

+2

¿Está seguro de que el archivo está en el lugar correcto? Dado que la declaración de requerimiento no puede encontrarlo ... – Veger

+1

Estaba seguro de que estaba en el lugar correcto, pero volví a verificarlo. Por algún motivo, el nombre del archivo fue test_module.r? B. Esto es extraño ya que se muestra en TextMate (donde creé el archivo) como .rb. Cambié el nombre del archivo y funcionó. Gracias por su tiempo en esto, estaba tan desconcertado que necesitaba otra mirada. – stellard

20

A partir de Rails 3, asegúrese de agregar el directorio lib a config.autoload_paths en config/application.rb, por lo que se lee el archivo que contiene el módulo y el módulo está cargado .

config.autoload_paths += %W(#{config.root}/lib) 

Look here para obtener más información sobre este y subdirectorios de carga.

Además, supposedly "no se debe utilizar requerir dentro de una aplicación de carriles, ya que evita ActiveSupport :: Dependencias de carga [un] que el código correctamente".