Para obtener intercambio en caliente para el código es complicado hacerlo bien, si es posible. Depende también del conjunto de cambios y de la aplicación en ejecución.
Problemas:
- viejos VARs pueden espacios de nombres de basura y causan conflictos sutiles, insectos
- redefinición de múltiples VARs no es atómica
Puede haber viejos VARs en un espacio de nombres que no será allí si reinicias la aplicación, sin embargo interferirá si solo redefines algunas de las funciones y mantienes la aplicación ejecutándose sin reiniciar.
El otro problema es la atomicidad: la redefinición de funciones múltiples, es decir, el cambio de varios vars no es atómico. Si cambia las funciones en uno o más espacios de nombres de los que depende el código en algún otro espacio de nombres, volver a cargar los espacios de nombres con el nuevo código no es atómico.
En general, es mejor ya sea
- tener un poder sostener las solicitudes hasta que su aplicación se reinicia
- girar hasta una nueva instancia aplicación paralela a la "versión antigua" y utilizar un proxy para cambiar de la nueva versión después de que la nueva versión esté lista para procesar solicitudes
Define "* safe *" en tu última frase. – dimagog
De la misma manera que [Meteor] (http://meteor.com) sí. Eso estaría bien. –
@dimagog sin que el servidor se cuelgue, y sin que los usuarios tengan que volver a conectarse, y sin perder o dañar el estado ... Me doy cuenta de que esto es imposible si se cambian las bibliotecas de terceros o el manejo de TCP (o http). Sin embargo, en la mayoría de los casos, usted hace cambios en la aplicación real, y sería bueno solucionar los errores sin un reinicio real del servidor. –