Sinatra / Rails: Persistierende benutzerdefinierte Klasse Instanzen während der App Lebensdauer
-
01-10-2019 - |
Frage
Kann ich assert Schienen / sinatra Apps werden nur einmal initialisiert und alle Anfragen teilen sich die gleiche App Beispiel? oder haben neue Anfragen Laich neue App-Instanzen?
Ist es möglich, beispielsweise benutzerdefinierte Klassen und bleiben sie während der App-Lebensdauer ohne Sitzungen, Datenbankspeicher oder Dienste von Drittanbietern verwenden? Wenn ja, was sind die Konsequenzen aus einer Thread-Sicherheit Sicht?
Ich bin zu Figur versuche, wie einen Web-basierte Download-Manager zu implementieren, und ich bin derzeit rubin basierten Frameworks zu bewerten.
Lösung
Kann ich assert Schienen / sinatra Anwendungen sind nur einmal und alle Anfragen initialisiert teilen sich die gleiche App-Instanz? oder tun, um neue Anfragen Laich neue App-Instanzen?
Nicht im Allgemeinen. Das hängt wirklich von Ihrem Setup. Wenn Sie nur auf Verfahren mit einem Server (auch bekannt als Rack-Handler), die das gleiche Anwendungsobjekt wieder verwendet, wird diese Arbeit. Ob die gleiche Instanz Ihrer Anwendung verwendet wird, hängt von der Web-Framework Sie verwenden. Sinatra zum Beispiel eine neue Instanz der Anwendung Klasse erstellt (in der Regel Sinatra::Application
) für jede Anfrage als Rack-Endpunkt verwendet, wenn.
Ist es möglich, beispielsweise benutzerdefinierte Klassen und bleiben sie während des App Lebensdauer ohne Sitzungen zu verwenden, Datenbank Speicher oder Dritten Dienstleistungen? Wenn ja, was ist die Auswirkungen von einer gewinde Unbedenklichkeit Sicht?
Wenn Sie wirklich Klassen wollen bestehen bleiben, werden Sie wahrscheinlich so etwas wie Magnetschwebebahn benötigen. Aber ich glaube, meinen Sie Instanzen von benutzerdefinierten Klassen persistierenden. Wenn Sie nicht über eine Datenbank für die Persistenz (Sie sollten wirklich) verwenden möchten, könnten Sie zu PStore zurückgreifen, die Schiffe mit Rubin.