Tengo un código de Rails que no encaja perfectamente en un modelo o caja de control. Entonces, según this answer, creé un directorio app/classes
. Rails 3 parece agregar esto automáticamente a la "ruta de carga" en Rails, y mi aplicación encuentra correctamente las clases que defino allí sin necesidad de utilizar las declaraciones require
.Rails 3.2.x: cómo volver a cargar el directorio de aplicaciones/clases durante el desarrollo?
Sin embargo, el código en app/classes
no se vuelve a cargar en el modo de desarrollo; si realizo un cambio, necesito reiniciar el servidor para ver ese cambio.
¿Cuál es la forma correcta de hacer que un directorio determinado sea "recargable" en Rails 3.2.x? Unas pocas respuestas aquí recomiendo hacer:
config.autoload_paths += %W(#{config.root}/app/classes)
pero yo creo que esto simplemente tiene el efecto de añadir app/classes
para el conjunto inicial de directorios para encontrar el código en; no parece hacerlos recargables para cada solicitud (y además en 3.x parece que se agrega automáticamente app/*
).
actualización:
figuras, yo tropezamos con la solución a tan sólo 30 segundos después de la publicación de la pregunta: ¿
me había envuelto mi clase dentro de un módulo. Una vez que eliminé el "MyModule" que lo rodeaba, de repente se volvió recargable. Procedente de un fondo Java, y habiendo sido quemado por código Ruby que contamina el espacio de nombres global, he desarrollado el hábito de poner todo dentro de un módulo. Supongo que el código de "aplicación" de Rails debe vivir fuera de cualquier módulo.
Intenta crear un subdirectorio bajo 'classes' con el nombre de tu módulo, y luego coloca todas las clases del módulo allí. Sospecho que si se cambia un archivo llamado 'bar.rb', solo se vuelve a cargar si se usa la clase' Bar', pero no si el nombre completo es 'Foo :: Bar' - entonces buscaría un archivo llamado 'foo/bar.rb' para volver a cargar. Sólo una suposición, sin embargo. – Thilo