Estoy intentando crear algo (en última instancia, una gema, pero por ahora una aplicación) que funciona de la siguiente manera.En Ruby on Rails, ¿cómo puedo persistir objetos en la memoria entre sesiones?
Supongamos, por ejemplo, que los registros DB son razas de perro. Hay una clase de padres de perros y una clase de niños para cada raza. Las razas reales no se conocen hasta el tiempo de ejecución.
Cuando el servidor comienza, cargará los registros de la base de datos y crea instancias de clases basadas en los registros, p. Puedo tener dos beagles y poodle. Cuando alguien llega al servidor, es posible que desee acceder a una de esas instancias de perro.
¿Por qué no crear la instancia sobre la marcha? En mi caso, los "perros" son básicamente clases que contienen un algoritmo y datos. El algoritmo no cambia, los datos cambian raramente (en el orden de los días), pero se accederá a la ejecución del algoritmo en sí, que utiliza datos y algunos datos dinámicos pasados, como una marca de tiempo, varias veces por segundo.
Sería tonto tener que volver a crear una instancia del objeto y cargar los datos cada vez solo para hacer una solicitud solo para volver a hacerlo en la siguiente solicitud (las solicitudes no cambian el estado del objeto) . Estaría creando y destruyendo múltiples objetos por segundo cuando podría reutilizar el mismo objeto.
no tiene sentido mantenerlo en la sesión, ya que alguien que quiere un caniche no debería necesitar tener la información de los beagles en su objeto de sesión; es irrelevante (y no escala).
¿Cómo persisto estos objetos en la memoria? Básicamente quiero una tabla de búsqueda para contener las instancias. En Java, crearía un singleton con algún tipo de hashmap o matriz que se encuentre en la memoria. En los rails intenté esto creando una clase singleton en la carpeta lib. Creo que no estoy entendiendo este derecho, que la instancia (el hecho de que es un singleton es discutible) se está perdiendo cuando la sesión desaparece.
La respuesta más cercana que encontré fue http://www.ruby-forum.com/topic/129372 que básicamente pone todo en campos y métodos de clase. De alguna manera, eso no parece correcto.
TIA!
Adición: Vengo de Java. En Java, simplemente crearía un objeto que se encuentra en el montón o quizás en un árbol JNDI y, a medida que ingresen las solicitudes HTTP, serían manejadas por un servlet o EJB o un elemento por solicitud que podría acceder al objeto persistente. Parece que no puedo encontrar el equivalente en rieles.
+1 para la pregunta, tengo un árbol para fines de búsqueda. No cambiará en absoluto y no quiero construirlo en cada solicitud. – lulalala