2

Puis-je affirmer que les applications rail/sinatra sont initialisées une seule fois et que toutes les demandes partagent la même application instance? ou est-ce que de nouvelles requêtes engendrent de nouvelles instances d'applications?Sinatra/Rails: Persistance des instances de classe personnalisées pendant la durée de vie de l'application

Est-il possible d'utiliser des classes personnalisées et de les conserver pendant la durée de vie de l'application sans utiliser de sessions, de stockages de bases de données ou de services tiers? Si oui, quelles sont les implications du point de vue de la sécurité des threads? J'essaie de comprendre comment implémenter un gestionnaire de téléchargement basé sur le Web et j'évalue actuellement les frameworks basés sur Ruby.

Répondre

2

Puis-je affirmer rails/apps sont sinatra initialisés qu'une seule fois et toutes les demandes partagent la même instance d'application? ou est-ce que les nouvelles requêtes engendrent de nouvelles instances d'applications?

Généralement pas. Cela dépend vraiment de votre configuration. Si vous exécutez uniquement sur un processus avec un serveur (aka Rack handler) qui réutilise le même objet d'application, cela fonctionnera. L'utilisation de la même instance de votre application dépend du framework Web que vous utilisez. Sinatra par exemple crée une nouvelle instance de votre classe d'application (généralement Sinatra::Application) pour chaque requête si elle est utilisée comme point de terminaison Rack.

Est-il possible d'exemple personnalisés les classes et les persistent pendant l'application vie sans utiliser des sessions, base de données de tiers ou des entrepôts services? Si oui, quelles sont les implications d'un point de vue sécurité ?

Si vous voulez vraiment persister des classes, vous aurez probablement besoin de quelque chose comme maglev. Cependant, je crois que vous voulez dire des instances persistantes de classes personnalisées. Si vous ne voulez pas utiliser une base de données pour la persistance (vous devriez vraiment), vous pourriez revenir à PStore, qui est livré avec Ruby.

+0

C'est une information assez choquante sur Sinatra. Je cherche partout pour savoir comment obtenir que Sinatra n'ouvre pas une nouvelle connexion db à chaque demande. Est-ce que Sinatra est dans le mauvais sens? – mjnissim

+0

Pourquoi est-ce choquant? Rails crée également une nouvelle instance de contrôleur pour chaque requête. Il ne suffit pas de stocker une connexion DB en tant que variable d'instance. Vous pouvez faire 'set: db, DB.connect (...)' et ensuite l'accéder comme 'settings.db' de la route, par exemple. –