web-dev-qa-db-fra.com

django.core.exceptions.AppRegistryNotReady: les applications ne sont pas encore chargées. (Django 2.0.1) (Python 3.6)

C’est la première fois que j’essaie de déployer une application Django (Django 2.0.1) (Python 3.6) sur python, car c’est une application de portefeuille simple, sans modèle, sans bootstrap . Juste Django, HTML, CSS et Javascript.

Après l'avoir extrait du dépôt Github sur pythnanywhere avec leur console bash, je lance:

python manage.py migrate

& a été frappé avec cette erreur:

Traceback (most recent call last):
File "manage.py", line 22, in <module>
execute_from_command_line(sys.argv)
File "/home/Limerin555/.virtualenvs/projectenv/lib/python3.6/site-
packages/Django/core/management/__init__.py", line 371, in 
execute_from_command_line
utility.execute()
File "/home/Limerin555/.virtualenvs/projectenv/lib/python3.6/site-
packages/Django/core/management/__init__.py", line 365, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/home/Limerin555/.virtualenvs/projectenv/lib/python3.6/site-
packages/Django/core/management/__init__.py", line 216, in fetch_command
klass = load_command_class(app_name, subcommand)
File "/home/Limerin555/.virtualenvs/projectenv/lib/python3.6/site-
packages/Django/core/management/__init__.py", line 36, in load_command_class
module = import_module('%s.management.commands.%s' % (app_name, name))
File "/home/Limerin555/.virtualenvs/projectenv/lib/python3.6/importlib/__init__.py", line 126, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 978, in _gcd_import
File "<frozen importlib._bootstrap>", line 961, in _find_and_load
File "<frozen importlib._bootstrap>", line 950, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 655, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 678, in exec_module
File "<frozen importlib._bootstrap>", line 205, in _call_with_frames_removed
File "/home/Limerin555/.virtualenvs/projectenv/lib/python3.6/site-
packages/Django/core/management/commands/migrate.py", line 12, in <module>
from Django.db.migrations.autodetector import MigrationAutodetector
File "/home/Limerin555/.virtualenvs/projectenv/lib/python3.6/site-
packages/Django/db/migrations/autodetector.py", line 11, in <module>
from Django.db.migrations.questioner import MigrationQuestioner
File "/home/Limerin555/.virtualenvs/projectenv/lib/python3.6/site-
packages/Django/db/migrations/questioner.py", line 9, in <module>
from .loader import MigrationLoader
File "/home/Limerin555/.virtualenvs/projectenv/lib/python3.6/site-packages/Django/db/migrations/loader.py", line 8, in <module>
from Django.db.migrations.recorder import MigrationRecorder
File "/home/Limerin555/.virtualenvs/projectenv/lib/python3.6/site-packages/Django/db/migrations/recorder.py", line 9, in <module>
class MigrationRecorder:
File "/home/Limerin555/.virtualenvs/projectenv/lib/python3.6/site-packages/Django/db/migrations/recorder.py", line 22, in MigrationRecorder
class Migration(models.Model):
File "/home/Limerin555/.virtualenvs/projectenv/lib/python3.6/site-packages/Django/db/models/base.py", line 100, in __new__
app_config = apps.get_containing_app_config(module)
File "/home/Limerin555/.virtualenvs/projectenv/lib/python3.6/site-packages/Django/apps/registry.py", line 244, in get_containing_app_config
self.check_apps_ready()
File "/home/Limerin555/.virtualenvs/projectenv/lib/python3.6/site-packages/Django/apps/registry.py", line 127, in check_apps_ready
raise AppRegistryNotReady("Apps aren't loaded yet.")
Django.core.exceptions.AppRegistryNotReady: Apps aren't loaded yet.

Je suis fatigué de chercher des solutions partout où je pourrais éventuellement trouver mais rien n’aide vraiment, j’ai même essayé d’ajouter cette ligne à mes settings.py:

import Django
django.setup()

sous cette ligne:

SECRET_KEY = os.environ.get("SECRET_KEY")

comme suggéré de ce post , mais en vain.

Voici mon settings.py:

import os

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
TEMPLATE_DIR = os.path.join(BASE_DIR, "templates")
STATIC_DIR = os.path.join(BASE_DIR, "static")

SECRET_KEY = os.environ.get('SECRET_KEY')

import Django
django.setup()

DEBUG = False

ALLOWED_HOSTS = ["limerin555.pythonanywhere.com"]

INSTALLED_APPS = [
    'Django.contrib.contenttypes',
    'Django.contrib.admin',
    'Django.contrib.auth',
    'Django.contrib.sessions',
    'Django.contrib.messages',
    'Django.contrib.staticfiles',
    'portfolio_showcase',
]

MIDDLEWARE = [
    'Django.middleware.security.SecurityMiddleware',
    'Django.contrib.sessions.middleware.SessionMiddleware',
    'Django.middleware.common.CommonMiddleware',
    'Django.middleware.csrf.CsrfViewMiddleware',
    'Django.contrib.auth.middleware.AuthenticationMiddleware',
    'Django.contrib.messages.middleware.MessageMiddleware',
    'Django.middleware.clickjacking.XFrameOptionsMiddleware',
]

ROOT_URLCONF = 'limerin.urls'

TEMPLATES = [
    {
        'BACKEND': 'Django.template.backends.Django.DjangoTemplates',
        'DIRS': [TEMPLATE_DIR,],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'Django.template.context_processors.debug',
                'Django.template.context_processors.request',
                'Django.contrib.auth.context_processors.auth',
                'Django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

WSGI_APPLICATION = 'limerin.wsgi.application'


DATABASE_PATH = os.path.join(BASE_DIR, 'db.sqlite3')

DATABASES = {
    'default': {
        'ENGINE': 'Django.db.backends.sqlite3',
        'NAME': DATABASE_PATH,
    }
}


AUTH_PASSWORD_VALIDATORS = [
    {
    'NAME': 
'Django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
    },
    {
        'NAME': 
'Django.contrib.auth.password_validation.MinimumLengthValidator',
    },
    {
        'NAME': 
'Django.contrib.auth.password_validation.CommonPasswordValidator',
    },
    {
        'NAME': 
'Django.contrib.auth.password_validation.NumericPasswordValidator',
    },
]

LANGUAGE_CODE = 'en-us'

TIME_ZONE = 'Asia/Singapore'

USE_I18N = True

USE_L10N = True

USE_TZ = True


STATIC_URL = '/static/'
STATICFILES_DIRS = [
    STATIC_DIR,
]

Je suis vraiment perdu sur ce point, en espérant que quelqu'un pourra vous aider à faire la lumière sur le problème réel.

21
Limerin555

Veuillez exécuter check commande Django-admin pour voir si elle a détecté des erreurs.

python manage.py check

et/ou

Django-admin check
18
Janusz Skonieczny

A surmonté la situation similaire tout à l'heure.

Tout ce dont vous avez vraiment besoin est ceci:

import os
os.environ.setdefault("Django_SETTINGS_MODULE", "your_project.settings")

Et puis ces lignes:

from Django.core.wsgi import get_wsgi_application
application = get_wsgi_application()

Après cela, vous pouvez facilement importer des modèles sans AppRegistryNotReady: Apps aren't loaded yet.

UPDATE: C'est vraiment les 4 lignes de code du fichier wsgi.py dans le dossier de votre projet.

12
Alexey Trofimov

Les documents Django disent que Django.setup charge les paramètres de settings.py en premier, il semble donc une mauvaise idée de l'exécuter dans settings.py.

Essayez de commenter les applications dans INSTALLED_APPS une par une. Vous constaterez probablement que l’une d’elles ne se charge pas pour une raison quelconque. Une fois que vous savez de quoi il s'agit, vous pouvez déterminer ce qui ne va pas.

8
Glenn

Plusieurs raisons peuvent expliquer cette erreur, mais toutes sont liées au fichier project/settings.py

  1. Vérifiez si vous avez initialisé SECRET_KEY dans celui-ci.
  2. Vérifiez si vous avez une application dans INSTALLED_APPS et n'est pas installée.
1
Rohit Sehgal

J'ai mis du temps à comprendre que chaque fois que vous exécutez manage.py somecommand, vous devez fournir les mêmes paramètres/variables d'environnement que ceux dont vous avez besoin pour exécuter ./manage.py runserver.

Par exemple, je charge SECRET_KEY à partir d'une variable d'environnement dans un fichier appelé .env. J'ai donc besoin de faire cela pour créer et exécuter des migrations:

. .env
./manage.py makemigrations --settings=djangoproject.settings.development
./manage.py migrate --settings=djangoproject.settings.development
0
Little Brain