La supervisión del cambio de código no funciona correctamente con Django 1.7 en mod-wsgi
Este es un problema que he encontrado en todos mis sitios que ejecutan Django 1.7 en mod_wsgi. El meollo del problema es que si, mientras se desarrolla localmente, introduzco un error fatal en la base de código, y luego lo corrijo, el script de monitoreo de código no detecta la corrección.
yo sueloEl script monitor.py de Graham Dumpleton para detectar cambios en la base de código cuando estoy desarrollando localmente (uso apache en lugar del servidor de desarrollo Django).
Siempre solía funcionar en Django <= 1.6, pero en Django 1.7 obtengo el siguiente error:
File "/home/me/.virtualenvs/myvirtualenv/lib/python2.7/site-packages/django/core/wsgi.py", line 14, in get_wsgi_application
django.setup()
File "/home/me/virtualenvs/myvirtualenv/lib/python2.7/site-packages/django/__init__.py", line 21, in setup
apps.populate(settings.INSTALLED_APPS)
File "/home/me/.virtualenvs/myvirtualenv/lib/python2.7/site-packages/django/apps/registry.py", line 78, in populate
raise RuntimeError("populate() isn't reentrant")
RuntimeError: populate() isn't reentrant
Lo irritante es que si corrijo el error, monitor.py no detecta el cambio, por lo que tengo que reiniciar apache o tocar otro archivo que ya estaba cargado (por ejemplo, el archivo de configuración).
Creo que esto se debe al hecho de que "el código de recarga solo monitorea los archivos importados (también conocidos como sys.modules)" (fuente) Entonces, debido a que el archivo incorrecto no se importó correctamente, monitor.py no sabe reiniciar el proceso.