Per ottenere hot-swap per il codice è complicato avere ragione, se possibile. Dipende anche dal changeset e dall'applicazione in esecuzione.
Issues:
- vecchi Vars possono namespace lettiera e causare conflitti sottili, insetti
- ridefinizione di molteplici Vars non è atomica
Ci possono essere vecchi Vars in uno spazio dei nomi che non sarà lì se si riavvia l'applicazione, tuttavia interferirà se si ridefiniscono alcune funzioni e si mantiene l'app in esecuzione senza riavvio.
L'altro problema è l'atomicità: ridefinizione di più funzioni, ovvero la modifica di più vars non è atomica. Se si cambiano le funzioni in uno o più namespace da cui dipende il codice in qualche altro spazio dei nomi, il ricaricamento degli spazi dei nomi con il nuovo codice non è atomico.
In generale, si sta meglio sia
- avere un proxy tenere le richieste fino a quando la vostra applicazione si riavvia
- girare una nuova istanza applicazione parallela alla "vecchia versione" e utilizzare un proxy per passare da la nuova versione dopo la nuova versione è pronta per elaborare le richieste
Definire "* safe *" nell'ultima frase. – dimagog
Lo stesso di [Meteor] (http://meteor.com). Sarebbe carino. –
@dimagog senza il crash del server, e senza che gli utenti debbano riconnettersi, e senza perdere o corrompere lo stato ... mi rendo conto che questo è impossibile se si modificano le librerie di terze parti o la reale manipolazione TCP (o http). Molto spesso, tuttavia, si apportano modifiche all'applicazione effettiva e sarebbe utile correggere bug senza un effettivo riavvio del server. –