python - Django: AppRegistryNotReady()
django-1.7 (4)
Python: 2.7; Django: 1.7; Mac 10.9.4
Estoy siguiendo el tutorial de Tango con Django
En el Capítulo 5, el tutorial enseña cómo crear un script de población, que puede crear automáticamente algunos datos para la base de datos para facilitar el desarrollo.
Creé un populate_rango.py en el mismo nivel de manage.py.
Aquí está el populate_rango.py:
import os
def populate():
python_cat = add_cat(''Python'')
add_page(
cat=python_cat,
title="Official Python Tutorial",
url="http://docs.python.org/2/tutorial/"
)
add_page(
cat=python_cat,
title="How to Think like a Computer Scientist",
url="http://www.greenteapress.com/thinkpython/"
)
add_page(
cat=python_cat,
title="Learn Python in 10 Minutes",
url="http://www.korokithakis.net/tutorials/python/"
)
django_cat = add_cat("Django")
add_page(
cat=django_cat,
title="Official Django Tutorial",
url="https://docs.djangoproject.com/en/1.5/intro/tutorial01/"
)
add_page(
cat=django_cat,
title="Django Rocks",
url="http://www.djangorocks.com/"
)
add_page(
cat=django_cat,
title="How to Tango with Django",
url="http://www.tangowithdjango.com/"
)
frame_cat = add_cat("Other Frameworks")
add_page(
cat=frame_cat,
title="Bottle",
url="http://bottlepy.org/docs/dev/"
)
add_page(
cat=frame_cat,
title="Flask",
url="http://flask.pocoo.org"
)
for c in Category.objects.all():
for p in Page.objects.filter(category=c):
print "- {0} - {1}".format(str(c), str(p))
def add_page(cat, title, url, views=0):
p = Page.objects.get_or_create(category=cat, title=title, url=url, views=views)[0]
return p
def add_cat(name):
c = Category.objects.get_or_create(name=name)[0]
return c
if __name__ == ''__main__'':
print "Starting Rango population script..."
os.environ.setdefault(''DJANGO_SETTINGS_MODULE'', ''tangle.settings'')
from rango.models import Category, Page
populate()
Luego ejecuto python populate_rango.py
en la terminal en el nivel de manage.py, se genera AppRegistryNotReady ():
django.core.exceptions.AppRegistryNotReady
Luego busqué en Google, encontré algo como this :
Standalone scripts¶
If you’re using Django in a plain Python script — rather than a management command — and you rely on the DJANGO_SETTINGS_MODULE environment variable, you must now explicitly initialize Django at the beginning of your script with:
>>> import django
>>> django.setup()
Otherwise, you will hit an AppRegistryNotReady exception.
Y todavía no tengo idea de qué debería hacer, ¿puede ayudar alguien? ¡¡¡Gracias!!!
Acabo de tropezar con el mismo problema en mi servidor de desarrollo local.
Después de introducir un código cambiado, se arrojó el error. El problema aquí obviamente no tiene nada que ver con wsgi, así que traté de ejecutar manage.py
Un simple: python manage.py
revela la verdadera causa del error.
En mi caso, una importación olvidada de una aplicación Django externa.
Tal vez esto ayude a alguien más a salir.
Encontré esta solución, agregando
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
después
os.environ.setdefault ...
Si está utilizando sus aplicaciones de proyectos django en scripts independientes, en otras palabras, sin usar manage.py
, manage.py
debe llamar manualmente a django.setup()
; esto configuraría el registro y, lo que es más importante, completará el registro de aplicaciones .
Cita de documentos de proceso de inicialización :
preparar()
Esta función se llama automáticamente:
Cuando se ejecuta un servidor HTTP a través del soporte WSGI de Django.
Al invocar un comando de administración.
Debe llamarse explícitamente en otros casos, por ejemplo, en scripts de Python sin formato.
En su caso, debe llamar a setup()
manualmente:
if __name__ == ''__main__'':
print "Starting Rango population script..."
os.environ.setdefault(''DJANGO_SETTINGS_MODULE'', ''tangle.settings'')
import django
django.setup()
populate()
Además, este problema se describe en detalle en la sección Troubleshooting de Troubleshooting .
También encontré este problema usando Django 1.7 en un servidor Apache. Al cambiar la wsgi
gestor de wsgi
en mi archivo wsgi.py
solucionó el problema:
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()
Esto fue sugerido here por el usuario ''jezdez''.