Si dovrebbe sempre presumere che l'intera app possa essere riavviata sotto le richieste intermedie. Che cosa succede se stai eseguendo 16 copie della tua app - la richiesta dell'utente 'jane' per '/' potrebbe entrare nella copia n. 2, quindi quando visita '/ signup' la richiesta colpirà # 12 (eventualmente avviato per questo evento) app. Quindi non importa ciò che fa Sinatra (anche se sembra che facciano qualcosa di simile), dal momento che la tua app potrebbe apparire ovunque, avviata oggi, ieri o un ms fa.
Se si pianifica di crescere, o di eseguire la distribuzione su Heroku, ecc., L'app deve funzionare correttamente con "shotgun", che riavvia tutto per ciascuna richiesta. Immagino che se la tua app fa qualcosa di radicalmente diverso da quello delle pagine web, e difficilmente arresti anomali o riavviati, potresti scappare con "NO"
Quindi la mia risposta è "SÌ" (ma non sempre, e nemmeno a volte generalmente).
Tuttavia, è utile sapere come funzionano le cose, in modo che si possa forse impostare solo uno schema di caching delle risorse calcolato complesso una volta per carico di app, che è un opt delle prestazioni. Ad esempio, se ogni chiamata all'app con url/calculate_pi? Decimals = 2000 risulta sempre nello stesso numero di 2000 cifre, è possibile memorizzarla in ogni istanza.
fonte
2011-12-07 02:12:14
Ho visto molte discussioni sui modi in cui forzare Sinatra/Rack per ricaricare i file e le applicazioni di origine, quindi suppongo che non vengano ricaricati di default, ho risposto correttamente alla domanda? –
Sarebbe anche molto interessante sapere se questo comportamento dipende dal tipo di distribuzione: WEBrick si comporterebbe come Passenger per uno? –
@Oleg: "Ricarica un file sorgente Ruby" e "Crea una nuova istanza" sono concetti diversi. Il primo è fatto da 'require' o' load', quest'ultimo è 'TheClass.new'. – miaout17