J'étais coincé dans le processus lorsque je voulais déployer le projet Django sur un serveur aujourd'hui. Quand je lance python manage.py runserver
sur le serveur, le terminal me montre ceci:
Traceback (most recent call last):
File "manage.py", line 10, in <module>
execute_from_command_line(sys.argv)
File "/usr/lib/python2.7/site-packages/Django/core/management/__init__.py", line 351, in execute_from_command_line
utility.execute()
File "/usr/lib/python2.7/site-packages/Django/core/management/__init__.py", line 343, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/usr/lib/python2.7/site-packages/Django/core/management/__init__.py", line 177, in fetch_command
commands = get_commands()
File "/usr/lib/python2.7/site-packages/Django/utils/lru_cache.py", line 101, in wrapper
result = user_function(*args, **kwds)
File "/usr/lib/python2.7/site-packages/Django/core/management/__init__.py", line 72, in get_commands
for app_config in reversed(list(apps.get_app_configs())):
File "/usr/lib/python2.7/site-packages/Django/apps/registry.py", line 137, in get_app_configs
self.check_apps_ready()
File "/usr/lib/python2.7/site-packages/Django/apps/registry.py", line 124, in check_apps_ready
raise AppRegistryNotReady("Apps aren't loaded yet.")
Django.core.exceptions.AppRegistryNotReady: Apps aren't loaded yet.
La version de Django sur le serveur est 1.8.5 et la version locale est 1.8.1. Je doute que la version puisse causer ce problème. Mais je doutais aussi que le wsgi.py
ne soit pas écrit correctement, voici le wsgi.py
:
import os
import sys
path = '/Users/Peterhon/Desktop/dict/'
if path not in sys.path:
sys.path.append(path)
os.chdir(path)
os.environ.setdefault("Django_SETTINGS_MODULE", "dict.settings")
import Django
django.setup()
from Django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
Voici le fichier manage.py
:
#!/usr/bin/env python
import os
import sys
if __== "__main__":
os.environ.setdefault("Django_SETTINGS_MODULE", "dict.settings")
from Django.core.management import execute_from_command_line
execute_from_command_line(sys.arg)
Lorsque j'exécute python manage.py check sur le serveur, le résultat est le suivant:
#!/usr/bin/env python
import os
import sys
if __== "__main__":
os.environ.setdefault("Django_SETTINGS_MODULE", "dict.settings")
from Django.core.management import execute_from_command_line
execute_from_command_line(sys.argv)
Quelqu'un pourrait-il me donner des conseils? Merci beaucoup
Cela pourrait bien être un problème avec vos paramètres Django. Par exemple, je venais de spécifier dans LOGGING
un nom de fichier dans un répertoire inexistant. Dès que je l'ai changé pour un répertoire existant, le problème a été résolu.
J'ai rencontré ce problème aujourd'hui. Il y avait une application dans INSTALLED_APPS qui n'existait pas. Une fois qu'il a été supprimé, il a résolu l'exception. Les applications qui ne peuvent pas être importées pour quelque raison que ce soit généreront également une exception AppRegistryNotReady.
./manage.py runserver
utilisera votre wsgi.py
mais il semblerait que la trace de pile que vous avez affichée en haut n'inclue pas le fichier wsgi. Par conséquent, l'erreur se produit avant le chargement du fichier wsgi.
Je ne suis pas en mesure de reproduire votre erreur, mais comme vous semblez utiliser le nouveau style wsgi et que vous mentionnez "la version de Django sur le serveur est la 1.8.5, et la version locale est 1.8.1", je me demande si quelque chose ne va pas dans votre environnement.
Mes étapes suggérées sont:
pip install -r requirements.txt
ou similaire.Espérons qu'une personne plus expérimentée pourra ajouter des suggestions. Désolé je n'ai pas la réponse définitive pour vous.
Il peut y avoir un problème dans votre fichier settings.py. INSTALLED_APPS en particulier vérifie si vous avez correctement inclus les applications et séparé avec ",".
J'ai aussi cette erreur quelles que soient les réponses existantes. Je résous par importer localement dans la fonction céleri.