He estado desarrollando una aplicación web Django implementada en un servidor Apache con WSGI y todo ha ido bien. Hoy, hice algunos cambios menores en mi aplicación admin.py
en un intento de personalizar la interfaz de administración de Django incorporada, e inicialmente cometí un error de sintaxis (un paréntesis sin cerrar). Esto significó que cuando toqué wsgi.py
y cargué el código (tengo WSGI ejecutándose en modo demonio en mi host virtual), mi sitio web fue reemplazado por un Error de servidor interno porque WSGI se detuvo cuando encontró el error de sintaxis.
Así que arreglé el error de sintaxis, verifiqué que no tenía más con manage.py check
y toqué wsgi.py
para volver a implementar. ¡Pero mi sitio web todavía muestra un error interno del servidor! Comprobando los registros de Apache, esto es lo que veo:
[Sun Nov 23 13:52:46 2014] [info] mod_wsgi (pid=19093): Create interpreter 'quotes.cs.cornell.edu|'.
[Sun Nov 23 13:52:46 2014] [info] mod_wsgi (pid=19093): Adding '/extra/www/html/quotes/quotes_django' to path.
[Sun Nov 23 13:52:46 2014] [info] mod_wsgi (pid=19093): Adding '/opt/rh/python27/root/usr/lib64/python2.7/site-
packages/' to path.
[Sun Nov 23 13:52:46 2014] [info] [client 128.84.33.19] mod_wsgi (pid=19093, process='quotes.cs.cornell.edu',
application='quotes.cs.cornell.edu|'): Loading WSGI script '/extra/www/html/quotes/quotes_django/quotes_django/
wsgi.py'.
[Sun Nov 23 13:52:46 2014] [error] [client 128.84.33.19] mod_wsgi (pid=19093): Target WSGI script '/extra/www/html/
quotes/quotes_django/quotes_django/wsgi.py' cannot be loaded as Python module.
[Sun Nov 23 13:52:46 2014] [error] [client 128.84.33.19] mod_wsgi (pid=19093): Exception occurred processing WSGI
script '/extra/www/html/quotes/quotes_django/quotes_django/wsgi.py'.
[Sun Nov 23 13:52:46 2014] [error] [client 128.84.33.19] Traceback (most recent call last):
[Sun Nov 23 13:52:46 2014] [error] [client 128.84.33.19] File "/extra/www/html/quotes/quotes_django/
quotes_django/wsgi.py", line 14, in <module>
[Sun Nov 23 13:52:46 2014] [error] [client 128.84.33.19] application = get_wsgi_application()
[Sun Nov 23 13:52:46 2014] [error] [client 128.84.33.19] File "/opt/rh/python27/root/usr/lib64/python2.7/site-
packages/django/core/wsgi.py", line 14, in get_wsgi_application
[Sun Nov 23 13:52:46 2014] [error] [client 128.84.33.19] django.setup()
[Sun Nov 23 13:52:46 2014] [error] [client 128.84.33.19] File "/opt/rh/python27/root/usr/lib64/python2.7/site-
packages/django/__init__.py", line 21, in setup
[Sun Nov 23 13:52:46 2014] [error] [client 128.84.33.19] apps.populate(settings.INSTALLED_APPS)
[Sun Nov 23 13:52:46 2014] [error] [client 128.84.33.19] File "/opt/rh/python27/root/usr/lib64/python2.7/site-
packages/django/apps/registry.py", line 115, in populate
[Sun Nov 23 13:52:46 2014] [error] [client 128.84.33.19] app_config.ready()
[Sun Nov 23 13:52:46 2014] [error] [client 128.84.33.19] File "/opt/rh/python27/root/usr/lib64/python2.7/site-
packages/django/contrib/admin/apps.py", line 22, in ready
[Sun Nov 23 13:52:46 2014] [error] [client 128.84.33.19] self.module.autodiscover()
[Sun Nov 23 13:52:46 2014] [error] [client 128.84.33.19] File "/opt/rh/python27/root/usr/lib64/python2.7/site-
packages/django/contrib/admin/__init__.py", line 23, in autodiscover
[Sun Nov 23 13:52:46 2014] [error] [client 128.84.33.19] autodiscover_modules('admin', register_to=site)
[Sun Nov 23 13:52:46 2014] [error] [client 128.84.33.19] File "/opt/rh/python27/root/usr/lib64/python2.7/site-
packages/django/utils/module_loading.py", line 74, in autodiscover_modules
[Sun Nov 23 13:52:46 2014] [error] [client 128.84.33.19] import_module('%s.%s' % (app_config.name,
module_to_search))
[Sun Nov 23 13:52:46 2014] [error] [client 128.84.33.19] File "/usr/lib64/python2.7/importlib/__init__.py", line
37, in import_module
[Sun Nov 23 13:52:46 2014] [error] [client 128.84.33.19] __import__(name)
[Sun Nov 23 13:52:46 2014] [error] [client 128.84.33.19] File "/extra/www/html/quotes/quotes_django/quotespage/
admin.py", line 25
[Sun Nov 23 13:52:46 2014] [error] [client 128.84.33.19] approve_quotes.short_description = "Approve selected
quotes"
[Sun Nov 23 13:52:46 2014] [error] [client 128.84.33.19] ^
[Sun Nov 23 13:52:46 2014] [error] [client 128.84.33.19] SyntaxError: invalid syntax
[Sun Nov 23 13:53:36 2014] [info] [client 128.84.33.19] mod_wsgi (pid=19093, process='quotes.cs.cornell.edu',
application='quotes.cs.cornell.edu|'): Loading WSGI script '/extra/www/html/quotes/quotes_django/quotes_django/
wsgi.py'.
[Sun Nov 23 13:53:36 2014] [error] [client 128.84.33.19] mod_wsgi (pid=19093): Target WSGI script '/extra/www/html/
quotes/quotes_django/quotes_django/wsgi.py' cannot be loaded as Python module.
[Sun Nov 23 13:53:36 2014] [error] [client 128.84.33.19] mod_wsgi (pid=19093): Exception occurred processing WSGI
script '/extra/www/html/quotes/quotes_django/quotes_django/wsgi.py'.
[Sun Nov 23 13:53:36 2014] [error] [client 128.84.33.19] Traceback (most recent call last):
[Sun Nov 23 13:53:36 2014] [error] [client 128.84.33.19] File "/extra/www/html/quotes/quotes_django/
quotes_django/wsgi.py", line 14, in <module>
[Sun Nov 23 13:53:36 2014] [error] [client 128.84.33.19] application = get_wsgi_application()
[Sun Nov 23 13:53:36 2014] [error] [client 128.84.33.19] File "/opt/rh/python27/root/usr/lib64/python2.7/site-
packages/django/core/wsgi.py", line 14, in get_wsgi_application
[Sun Nov 23 13:53:36 2014] [error] [client 128.84.33.19] django.setup()
[Sun Nov 23 13:53:36 2014] [error] [client 128.84.33.19] File "/opt/rh/python27/root/usr/lib64/python2.7/site-
packages/django/__init__.py", line 21, in setup
[Sun Nov 23 13:53:36 2014] [error] [client 128.84.33.19] apps.populate(settings.INSTALLED_APPS)
[Sun Nov 23 13:53:36 2014] [error] [client 128.84.33.19] File "/opt/rh/python27/root/usr/lib64/python2.7/site-
packages/django/apps/registry.py", line 78, in populate
[Sun Nov 23 13:53:36 2014] [error] [client 128.84.33.19] raise RuntimeError("populate() isn't reentrant")
[Sun Nov 23 13:53:36 2014] [error] [client 128.84.33.19] RuntimeError: populate() isn't reentrant
La primera serie de errores muestra que WSGI falla debido al error de sintaxis en my admin.py
. Sin embargo, la segunda serie de errores parece mostrar un error interno de Django:
RuntimeError: populate() isn't reentrant
arrojado del populate
método de registry.py
.
Buscar en Google este mensaje de error devuelve sorprendentemente poca información, nada de la documentación de Django. Aparentemente, a veces puede suceder si nombras una aplicación dos veces en tu settings.py
, pero no estoy haciendo eso. Más importante aún, no he cambiado settings.py
desde el momento en que el sitio web funcionaba bien; lo único que cambié fue admin.py
.
Intenté revertir todos los cambios que hice, por lo que todo mi código Python volvió al estado en el que estaba cuando el sitio web estaba funcionando, ¡y todavía obtengo el populate() isn't reentrant
error cuando trato de hacer que WSGI vuelva a cargar el código!
También intenté comentar diferentes aplicaciones en la sección INSTALLED_APPS de settings.py
, e incluso con solo 'django.contrib.staticfiles' habilitado, el error sigue ocurriendo. Extrañamente, sigo recibiendo el error incluso si comento todas las aplicaciones: ¡Django arroja el error incluso cuando no está cargando ninguna aplicación!
¿Alguien sabe lo que está pasando aquí? ¿O alguna forma mejor de depurar este error, ya que el rastreo en el registro de Apache es bastante inútil?
Notas: Estoy usando Django 1.7, Apache 2.2 y Python 2.7.
fuente
wsgi.py
da como resultado el mismo error de Apache y los archivos .pyc no se vuelven a crear.Respuestas:
Esto es causado por un error en la configuración de Django en algún lugar. Desafortunadamente, Django está ocultando el error detrás de este mensaje de error genérico y no útil.
Para revelar el verdadero problema, abra
django/apps/registry.py
y alrededor de la línea 80, reemplace:con:
Esto permitirá que Django continúe cargando y revele el error real.
Encontré este error por varias causas diferentes. Una vez fue porque tuve una mala importación en uno de los archivos admin.py de mi aplicación.
fuente
django.core.exceptions.ImproperlyConfigured: psycopg2_version 2.5.4 or newer is required; you have 2.5 (dt dec pq3 ext)
pip install --upgrade psycopg2
y eso lo solucionó.El administrador de mi servidor reinició Apache y eso solucionó mágicamente este problema. Los mismos archivos de Python exactos cargados sin causar
populate() isn't reentrant
. Incluso intenté cargar otro archivo con un error de sintaxis, luego solucionarlo, y el servidor pudo cargar el nuevo archivo y ejecutarse correctamente sin problemas.Todavía no sé qué estaba fallando, pero lo estoy marcando como respondido ya que el problema desapareció. (Bueno, lo marcaré como respondido tan pronto como StackOverflow me permita aceptar mi propia respuesta).
Actualización : después de continuar recibiendo este error cuando accidentalmente subo Python con errores de sintaxis, descubrí una solución que es más fácil que reiniciar Apache. Cuando WSGI comienza a lanzar el
populate() isn't reentrant
error, reemplazo mi proyecto Djangowsgi.py
con esta función simple:Luego vuelvo a cargar mi sitio web y el proceso del demonio WSGI se reinicia (lo que puedo saber al mirar el registro de Apache, aunque el sitio web todavía muestra el mismo error 500).
Si luego
wsgi.py
vuelvo a la normalidad y vuelvo a cargar, WSGI recoge correctamente mi código sin lanzarpopulate() isn't reentrant
(suponiendo que esta vez no tenga errores de sintaxis). Entonces, no es necesario reiniciar Apache en su totalidad, solo el proceso WSGI, y puedo hacerlo sin privilegios de root.fuente
startup-timeout
opción para el modo demonio de mod_wsgi en las versiones más recientes de mod_wsgi que ayuda a recuperarse de errores transitorios cuando se inicializa Django, como una base de datos que no está disponible. El tiempo de espera hará que el proceso se reinicie automáticamente si la aplicación WSGI no se carga correctamente después del período de tiempo de espera. Incluso eso no ayudará cuando tenga un problema permanente con su propio código. En ese caso, busque el primer error, no elpopulate()
error, ya que le dará la verdadera razón por la que su código falla.Sé que esta es una respuesta antigua, pero contribuiré con mi solución:
Como una forma de diagnosticar el origen del problema, ejecute
manage.py check
y vea si encuentra algo allíEn mi caso, un requisito obsoleto fue el problema y django no pudo importar un submódulo
Asegúrese de que sus requisitos estén actualizados
fuente
manage.py check
encontré el problema. Gracias.No es una respuesta sino una reflexión.
Cuando actualiza a django 1.7 y tiene un error 500 y vuelve a cargar su página, Apache dice "populate () no es reentrante". Creo que es cuando cargas tu página, Apache carga todos los módulos que necesitas para tu aplicación y cuando se maneja el error no descarga el módulo. Entonces, cuando recarga su página, apache carga nuevamente estos módulos pero ya está cargado. Entonces, apache dice que "poblar () no es reentrante".
Tengo dos acciones para corregir esto: reiniciar Apache o corregir el error que maneja el primer error de 5OO.
Intente reiniciar apache con:
Espero que te ayude.
fuente
Si recibe este error al usar Google App Engine, verifique sus registros en busca de otros errores que puedan estar causando esto. Estuve obteniendo:
ImproperlyConfigured: Error loading either pysqlite2 or sqlite3 modules (tried in that order): No module named _sqlite3
No puede usar SQLite con Google App Engine, por lo que comentar la
DATABASES
sección desettings.py
detuvo ese error y también elRuntimeError("populate() isn't reentrant")
error.fuente
Es posible que pueda solucionarlo sin reiniciar Apache tocando un archivo (que no sea wsgi.py) que se encuentra al principio del proceso de carga. Por ejemplo, su archivo de configuración:
Tampoco he resuelto esto correctamente, pero más información en mi pregunta aquí: El monitoreo de cambio de código no funciona correctamente con Django 1.7 en mod-wsgi
fuente
Apache almacena el archivo wsgi en su caché. Deshabilitar el almacenamiento en caché de Apache de archivos python
Entonces, primero elimine el archivo wsgi y reinicie su acpache y luego agregue el archivo wsgi nuevamente y reinicie apache.
fuente
Simplemente enfrenté el mismo problema, así que comencé a buscar.
Ahora lo tengo funcionando, ¡así que pensé que debería compartirlo con ustedes!
Todo lo que hice fue hacer una
chown user:group /to/path -R
ychmod 770 /to/path -R
otra vez y funcionó.fuente
Esto parece una buena colección de respuestas válidas para el mismo error de Apache mod-wsgi, cada chico publica la que funciona para él / ella, así que aquí está la mía:
No olvide actualizar los requisitos de su proyecto después de la implementación :)
fuente
Experimenté este mismo problema, y la fuente del error para mí fue solo un error de sintaxis en un archivo con el que estaba trabajando. Después de corregir el error tipográfico, el
populate() is not reentrant
error desapareció.Si está ejecutando django desde un script wsgi, es posible que pueda identificar el error tipográfico simplemente ejecutando el script wsgi desde la línea de comandos. Por ejemplo:
fuente
Este error también se genera si hay inconsistencia en el uso del espacio y tabulación en el código.
fuente
Configuración: Ubuntu 14.04, Django 1.10, Python 3.5 (in
virtualenv
).Probé muchas de estas soluciones sin suerte, pero luego noté que el registro de errores de Apache contiene dos errores diferentes en mi caso. Uno que sucede cuando alguien intenta visitar una página, otro que sucede al inicio. Me perdí el de inicio porque generalmente intenté actualizar la página un par de veces y, por lo tanto, solo vi repetido el error de visita varias veces.
Luego busqué soluciones para el error de inicio y la solución a esta pregunta funcionó para mí . En resumen, implica actualizar el
mod_wsgi
paquete de forma indirecta.Había estado recibiendo advertencias durante meses sobre la falta de coincidencia en las
mod_wsgi
versiones, pero de repente resultó en el error 500 de Apache. No tiene ningún sentido para mí.Mi conjetura es que esto
RuntimeError: populate() isn't reentrant
error suele ser una señal de que uno debe buscar un error de inicio, que indica el problema real.de visita
puesta en marcha
fuente
populate()
problema en absoluto y para mí parece un problema completamente diferente, por lo que no veo cómo crees que estaba resolviendo el mismo problema. Por lo que cualquiera puede decir, tuvo un problema diferente para el que debería haber hecho una pregunta separada al principio en lugar de confundir las respuestas aquí para lo que parece un problema diferente según los detalles de esa otra publicación ..Sé que ha pasado un tiempo desde que se hizo esta pregunta, pero me encontré con este problema debido a un problema que no he visto discutido aquí. Recibí el
RuntimeError: populate() isn't reentrant
error debido a SELinux en CentOS 7. Hice que Django fuera servido desde un directorio de inicio, y simplemente tuve que habilitar el booleano SELinux que permitía leer directorios de inicio, ya que el error populate () se debía a un problema de permisos. La solución para mí fuesetsebool -P httpd_read_user_content 1
. Espero que esto ayude a alguien que tenga este problema.fuente
chcon
para cambiar el contexto del.so
archivo del problema ahttpd_sys_script_exec_t
.La multitud de respuestas lo deja claro; este es un error genérico que puede tener múltiples causas, generalmente relacionadas con la carga de Apache / WSGI.
Todas estas respuestas en esta página deberían funcionar como una especie de lista de verificación, y en ese sentido, quiero agregar la causa raíz de mi instancia de este error: falla al agregar un 'import os' a su archivo settings.py.
Específicamente, teníamos un desarrollador en nuestro equipo que tenía la intención de eliminar un paquete innecesario y, en su lugar, eliminó 'import os' de la parte superior del archivo settings.py de producción. Después de un reinicio de Apache, nuestra aplicación no se reiniciaba y recibimos el temido error 'RuntimeError: populate () doesn't reentrant'.
Una rápida 'comprobación de python manage.py' no reveló el problema, pero una 'python settings.py' sí; el paquete del sistema operativo no se cargó.
Si tiene este error, centre su búsqueda en comprobar su (s) archivo (s) settings.py y también su archivo WSGI.
fuente
reentrant
solo el error. En el modo demonio, asegúrese también de que está utilizando lastartup-timeout
opción si tiene este problema debido a errores transitorios, en lugar de errores de codificación. Al menos de esa manera se puede recuperar automáticamente.RuntimeError: populate() isn't reentrant
Puede ser cualquier cosa, por eso hay tantas respuestas diferentes para esta pregunta.
El truco consiste en mirar el mensaje de error justo antes del
RuntimeError
. En su caso, parece haber un error de sintaxis en el archivo /extra/www/htmlquotes/quotes_django/quotespage/admin.py en la línea 15, consulte:fuente
Nota sobre AWS Elastic Beanstalk: el valor predeterminado
settings.py
escrito por Django-admin incluye una referencia a una base de datos sqlite local como fuente de datos. Es probable que esto funcione en su sistema operativo local, pero no en AWS EB, y dará elpopulate() isn't reentrant
error de tiempo de ejecución. Para probar esto, simplemente comente laDATABASES={<...>}
declaraciónsettings.py
, implemente y vuelva a abrir la aplicación.fuente
django.core.exceptions.ImproperlyConfigured: SQLite 3.8.3 or later is required (found 3.7.17).
seguirá elRuntimeError: populate() isn't reentrant
. De los documentos de AWS : "Django 2.2 es incompatible con la plataforma Elastic Beanstalk Python 3.6". (en el momento de escribir este artículo)Tuve este problema y no pude encontrar ninguna respuesta por qué hasta que retrocedí en mis confirmaciones. Aparentemente, había agregado una importación accidental, debido a la finalización automática, que arruinó la configuración.
# found in models.py from msilib.schema import SelfReg
En el registro de errores de Apache: RuntimeError ("populate () no es reentrante")
Funcionó bien en mi entorno de desarrollo de Windows pero falló en el servidor ubuntu / apache.
fuente
Estaba entrando en este mismo error después de haber cambiado el orden de esta configuración:
ponerlo de nuevo en el orden aquí antes y reiniciar Apache solucionó el problema.
fuente
En mi caso, tenía un
custom renderer class
forDjango Rest Framework
, por algún motivo tuve que anular el método de la clase de renderizador "get_context" (divulgación completa: paradjango toolbar
dar el recuento correcto de consultas SQL)Quité esa clase y la redistribuí. Funcionó.
fuente
En mi caso, el error se produjo porque faltaba un paquete pip requerido.
Así que hice un
pip install -r requirements.txt
reinicio de Apache y las cosas funcionaron de nuevo.fuente
La eliminación del directorio virtualenv, la recreación del virtualenv y la reinstalación de todos los requisitos me solucionó.
fuente
Añadiendo mi razón a la lista. Para mí fue porque tenía un servicio de django nombrado con el mismo directorio que un directorio de procesos. Cambiar el nombre del proceso / directorio solucionó el problema.
fuente
Tuve un recursivo
django.setup()
, por ejemplo, intenté escribir undjango.setup()
dentro de un anapp/models.py
, en el seguimiento de la pila, django intentó señalar esto cerca de:así que sí, asegúrese de no intentar configurar django mientras se está configurando django ...
fuente
Reiniciar el servidor Apache resolvió el problema. Puede hacerlo usando el comando $ sudo service apache2 restart
fuente
Tuve este mismo problema, lo que funcionó para mí fue comentar la configuración predeterminada de la base de datos en / settings.py. También leí que las versiones posteriores de django no son compatibles con ebs
fuente
Para mí, el error fue un
mysqlclient
paquete que faltaba en el archivo requirements.txt.Primero instalé el
mysqlclient
paquete con:luego actualicé el archivo requirements.txt con:
y esto resolvió mi problema.
fuente
En mi caso, tuve una importación circular, lo que provocó un error que rompió el método de llenado.
fuente
Para tirar mis 2 centavos de euro:
Recreé una configuración funcional en Docker. La nueva configuración de Docker falló con
que parece ser un error genérico. En mi caso, pasé por alto que
instala la última versión (
2.0
), en lugar de la versión requerida1.11
. Cambiando esto asolucionó mi problema.
fuente
Creo que este es un error genérico cuando algo anda mal
settings.py
. A veces puedo encontrar el problema mediante prueba y error eliminando las aplicaciones instaladas una a la vez. En algunos casos, no está relacionado con las aplicaciones instaladas. Pero desde mi experiencia, en todos los casos es un problema dentro delsettings.py
archivo.fuente
compruebe si ha mencionado los nombres de su api dos veces en la sección de aplicaciones instaladas de settings.py.
Definición de aplicación
Definición de aplicación
Eliminar entradas duplicadas resolvió mi problema
fuente