Ich versuche, etwas zu bauen (letztlich ein Juwel, aber für jetzt eine Anwendung), die wie folgt funktioniert.In Ruby on Rails wie kann ich Objekte im Speicher zwischen den Sitzungen beibehalten
Angenommen zum Beispiel die DB-Datensätze sind Hunderassen. Für jede Rasse gibt es eine Elternklasse und eine Kinderklasse. Die tatsächlichen Rassen sind bis zur Laufzeit nicht bekannt.
Wenn der Server beginnt, lädt er Datensätze aus der DB und instanziiert Instanzen von Klassen basierend auf den Datensätzen, z. Ich habe vielleicht zwei Beagles und Pudel. Wenn jemand zum Server kommt, möchte er möglicherweise auf eine dieser Instanzen zugreifen.
Warum nicht einfach die Instanz im laufenden Betrieb erstellen? In meinem Fall sind die "Hunde" im Grunde Klassen, die einen Algorithmus und Daten enthalten. Der Algorithmus ändert sich nicht, die Daten ändern sich selten (in der Größenordnung von Tagen), aber auf die Ausführung des Algorithmus selbst, der sowohl Daten als auch einige dynamische Daten wie einen Zeitstempel verwendet, wird mehrmals pro Sekunde zugegriffen.
Es wäre albern, eine Instanz des Objekts neu erstellen zu müssen und die Daten jedes Mal neu laden zu müssen, nur um sie bei der nächsten Anfrage erneut auszuführen (die Anfragen ändern den Status des Objekts nicht) . Ich würde mehrere Objekte pro Sekunde erstellen und zerstören, wenn ich das gleiche Objekt einfach wiederverwenden könnte.
es macht keinen Sinn, es in der Sitzung zu behalten, da jemand, der einen Pudel will, nicht die Beagles-Informationen in seinem Sitzungsobjekt haben muss; Es ist irrelevant (und skaliert nicht).
Wie behalte ich diese Objekte im Speicher? Ich möchte grundsätzlich eine Nachschlagetabelle, um die Instanzen zu halten. In Java würde ich ein Singleton mit einer Art von hashmap oder Array erstellen, die im Speicher sitzt. In Rails habe ich das versucht, indem ich im lib-Ordner eine Singleton-Klasse erstellt habe. Ich denke - ich verstehe dieses Recht vielleicht nicht - dass die Instanz (die Tatsache, dass es ein Singleton ist, ist egal) ist verloren, wenn die Sitzung verschwindet.
Die nächste Antwort, die ich fand, war http://www.ruby-forum.com/topic/129372, die im Grunde alles in Klasse Felder und Methoden setzt. Irgendwie scheint das nicht richtig zu sein.
TIA!
Zusatz: Ich komme aus Java. In Java würde ich einfach ein Objekt erstellen, das sich auf dem Heap oder vielleicht in einer JNDI-Struktur befindet, und wenn HTTP-Anfragen eintreffen, würden sie von einem Servlet oder EJB oder einem pro-Anfrage-Objekt behandelt, das dann auf das persistente Objekt zugreifen könnte. Ich kann nicht das Äquivalent in Schienen finden.
+1 für die Frage, ich habe einen Baum zum Nachschlagen Zweck. Es wird sich überhaupt nicht ändern und ich möchte es nicht bei jeder Anfrage konstruieren. – lulalala