2015-06-20 14 views
21

Continuo a ricevere questo quando provo a caricare la mia applicazione Django in produzione. Ho provato tutte le risposte StackOverflow ma nulla ha risolto. Altre idee (Sto usando Django 1.5.2 e Apache)Django populate() non è rientro

Traceback (most recent call last): 
     File "/var/www/thehomeboard/wwwhome/wsgi.py", line 37, in <module> 
      application = get_wsgi_application() 
     File "/usr/local/lib/python2.7/dist-packages/django/core/wsgi.py", line 14, in get_wsgi_application 
      django.setup() 
     File "/usr/local/lib/python2.7/dist-packages/django/__init__.py", line 18, in setup 
      apps.populate(settings.INSTALLED_APPS) 
     File "/usr/local/lib/python2.7/dist-packages/django/apps/registry.py", line 78, in populate 
      raise RuntimeError("populate() isn't reentrant") 
     RuntimeError: populate() isn't reentrant 
+0

Come stai eseguendo Django? Vedi qualche altro errore ovunque? – knbk

+0

Cosa intendi con come sto eseguendo django? Ottengo solo gli errori nei file di log di apache. –

+0

Che cosa stai usando per eseguire l'applicazione wsgi attuale? mod_wsgi? Questo errore è causato da un errore durante 'populate()', nel qual caso questo è l'errore che si ottiene la prossima volta che viene eseguito, o, meno probabile, da un codice asincrono impropriamente eseguito - ad esempio quando si utilizza gevent senza il corretto configurazione. – knbk

risposta

5

Alla fine il problema che ho avuto è stata che ho provato a fare funzionare un secondo Django app e non ha avuto le seguenti definito nella mia configurazione di Apache:

WSGIDaemonProcess ... 
WSGIProcessGroup ... 

appena saputo che è possibile eseguire un singolo Django app senza definirli ma quando i due produce un conflitto.

+0

Questo è successo anche a me oggi, quando ho accidentalmente distribuito il mio progetto Django sviluppato per Python 2.x a un'istanza di Python 3.x su Webfaction. Non ho investigato i dettagli.Solo qualcosa da controllare prima di scendere nella tana del coniglio. – guidos

21

Questo RuntimeError primo si è verificato per me, dopo l'aggiornamento a Django 1.7 (ed è tuttora presente con Django 1.8). Di solito è causato da un'applicazione Django che solleva un errore, ma quell'errore è in qualche modo ingoiato.

Ecco una soluzione che funziona per me. Aggiungerlo al wsgi.py e il vero errore deve essere registrato:

import os 
import time 
import traceback 
import signal 
import sys 
from django.core.wsgi import get_wsgi_application 

try: 
    application = get_wsgi_application() 
    print 'WSGI without exception' 
except Exception: 
    print 'handling WSGI exception' 
    # Error loading applications 
    if 'mod_wsgi' in sys.modules: 
     traceback.print_exc() 
     os.kill(os.getpid(), signal.SIGINT) 
     time.sleep(2.5) 

Vedi this thread su modwsgi per maggiori dettagli.

+0

Questo continua a darmi un errore che dice 'Target Lo script WSGI "/home/admusr/project/WebManager/wsgi.py" non contiene l'applicazione dell'applicazione WSGI. " – ewok

+0

Utilizzo di questa soluzione - Ottengo" NameError: nome globale "sys" non è definito "in quanto manca questo snippet un "import sys" – kraenhansen

+0

Il codice sopra riportato non è il file wsgi.py completo. Dovresti avere un 'import sys' da qualche parte sopra il file predefinito già. In caso contrario, aggiungilo. –

3

Ci sono molte cause di errore populate() isn't reentrant. Se si guarda alla registry.py nell'applicazione in Django probabilmente all'interno di questa directory
/python2.7/site-packages/django/apps

 # app_config should be pristine, otherwise the code below won't 
     # guarantee that the order matches the order in INSTALLED_APPS. 
     if self.app_configs: 
      raise RuntimeError("populate() isn't reentrant") 

Come si vede nel commento che dice APP_CONFIG dovrebbe essere incontaminato. Il che significa che se una delle configurazioni non è corretta o manca la libreria richiesta aumenterà questo errore di popolamento. Ho ricevuto questo errore perché ho perso l'installazione sqlite. Anche se vedi, non vi è alcuna menzione delle possibili cause nell'eccezione. Ho installato SQLite da questo comando su debian

pip install pysqlite 

E 'risolto il mio problema. La mia eccezione a causa della mancanza di pysqlite. La tua mancanza forse di un altro pacchetto richiesto o errori nel tuo settings.py