2010-08-06 5 views

Respuesta

2

Esto también se puede hacer si no se usa el directorio lib/, sino que se almacenan las clases o archivos auxiliares dentro del directorio app/helpers. De esta forma, se volverán a cargar durante el tiempo de desarrollo y se almacenarán en caché durante el tiempo de producción.

8

Por "clases de almacenamiento en caché" Supongo que quiere decir que los archivos de origen dentro del directorio de la aplicación se vuelven a cargar automáticamente en el entorno de desarrollo antes de procesar una nueva solicitud.

Esto no está relacionado con el almacenamiento en caché, el comportamiento normal de Ruby es, leer y analizar un archivo fuente una vez y nunca más, siempre que se ejecute el proceso. Rails (ActiveSupport :: Dependency en realidad) proporciona un mecanismo para volver a cargar todo el código antes de procesar una solicitud. En el entorno de desarrollo, esto es útil ya que no desea reiniciar el servidor web local por cada cambio que realice en el código. En el entorno de producción, esto perjudicaría gravemente el rendimiento y, por lo tanto, se desactivará.

De forma predeterminada, las clases de la aplicación se marcan como recargables. Puede marcar clases arbitrarias que volver a cargar antes de la solicitud es procesada en el entorno de desarrollo utilizando el método unloadable clase:

class MyClass 
    unloadable # mark this class as reloadable before a request is processed 

    # … 
end 

Tenga en cuenta que no todas las clases puede jugar bien con descarga. Siempre que defina su clase en un archivo de origen que encuentre y cargue el mecanismo de carga automática de Rails, probablemente sea bueno. Pero puede tener problemas si reabre su clase en otro lugar para enviar un parche, ya que la carga automática no detectará esto.

+1

No exactamente. Lo que quiero decir es que cuando cargo una clase (usando require e include) en mi aplicación. Entonces, siempre que esa clase se use en otra página u otra solicitud, entonces los rieles NO requieren el archivo (cargar el archivo) nuevamente, simplemente usa la clase que se cargó antes (porque permanece en la memoria). Esto se vuelve frustrante ya que necesito volver a cargar el servidor de los raíles cada vez que realizo un cambio en la clase lib que está incluida. Lo estoy ejecutando en modo de desarrollo con las clases de caché de configuración establecidas en falso. – matsko

+1

Ya veo. El mecanismo de recarga de Rails probablemente solo funcione si tu clase está cubierta por la carga automática de Rails, no si la requieres manualmente. Sugeriría que tu clase se cargue mediante la carga automática de Rails, lo cual es muy conveniente de todos modos (no tienes que exigirlo y funciona en todas partes). Si eso no es posible, podría intentar explotar la carga automática de Rails cargando su archivo de clase en un archivo cubierto por carga automática (pero asegúrese de usar #load, not #require, ya que requieren solo cargas una vez) – Zargony

Cuestiones relacionadas