wake-up-neo.net

django.core.exceptions.AppRegistryNotReady: Apps sind noch nicht geladen. (Django 2.0.1) (Python 3.6)

Ich habe zum ersten Mal versucht, eine Django-App (Django 2.0.1) (Python 3.6) für Pythonanywhere bereitzustellen, es ist eine einfache Portfolio-App ohne Modelle und ohne Bootstrap. Nur Django, HTML, CSS & Javascript.

Nachdem ich es aus dem Github-Repo mit seiner bash-Konsole auf pythnanywhere gezogen habe, starte ich:

python manage.py migrate

& wurde mit diesem Fehler getroffen:

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.

Ich war müde, überall nach Lösungen zu suchen, die ich möglicherweise finden konnte, aber nichts hilft wirklich. Ich habe sogar versucht, diese Zeile in meine Einstellungen aufzunehmen.py:

import Django
django.setup()

unter dieser Linie:

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

wie von diesem Beitrag vorgeschlagen , aber ohne Erfolg.

Hier ist meine Einstellungen.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,
]

Ich bin wirklich verloren, in der Hoffnung, dass jemand helfen kann, ein wenig Licht auf das eigentliche Problem zu werfen.

21
Limerin555

Führen Sie check Django-Admin-Befehl aus, um festzustellen, ob Fehler aufgetreten sind.

python manage.py check

und/oder

Django-admin check
18

Gerade jetzt eine ähnliche Situation überwunden.

Alles was Sie wirklich brauchen, ist folgendes:

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

Und dann diese Zeilen:

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

Danach können Sie Modelle ohne AppRegistryNotReady: Apps aren't loaded yet. problemlos importieren.

UPDATE: Dies sind die 4 Codezeilen aus der Datei wsgi.py im Ordner Ihres Projekts.

12
Alexey Trofimov

Die Django-Dokumente sagen, dass Django.setup die Einstellungen von settings.py als ersten Schritt lädt. Es scheint also eine schlechte Idee zu sein, das in settings.py auszuführen.

Versuchen Sie, Apps in INSTALLED_APPS einzeln zu kommentieren - Sie werden wahrscheinlich feststellen, dass eine von ihnen aus irgendeinem Grund nicht geladen wird. Sobald Sie wissen, was es ist, können Sie herausfinden, was daran falsch ist.

8
Glenn

Für diesen Fehler kann es mehrere Gründe geben, die jedoch alle mit der project/settings.py-Datei zusammenhängen. 

  1. Prüfen Sie, ob Sie SECRET_KEY darin initialisiert haben.
  2. Prüfen Sie, ob Sie eine Anwendung in INSTALLED_APPS haben und nicht installiert sind.
1
Rohit Sehgal

Mein Problem war, dass ich versuchte zu importieren, bevor das Setup ausgeführt wurde. Hier ist meine Lösung: Mach den Import nach dem Setup:

import Django

# some variable declarations    
world_mapping = {
    'osm_id': 'osm_id',
}    

if __name__ == '__main__':
    Django.setup()
    # import AFTER setup
    from app.models import WorldBorder
    # from now I can access WorldBorder!!
1
Olivier Pons

Es dauerte eine Weile, bis ich verstanden habe, dass Sie bei jeder Ausführung von manage.py somecommand dieselben Einstellungen/Umgebungsvariablen angeben müssen, die Sie für die Ausführung von ./manage.py runserver benötigen.

Zum Beispiel lade ich SECRET_KEY aus einer Umgebungsvariablen in einer Datei namens .env. Daher muss ich dies tun, um Migrationen durchzuführen und auszuführen:

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

Zuerst: Überprüfen Sie, ob Sie den gleichen Code wie unten in yourproject.wsgi.py haben

"""
WSGI config for store project.

It exposes the WSGI callable as a module-level variable named ``application``.
For more information on this file, see
https://docs.djangoproject.com/en/2.0/howto/deployment/wsgi/
"""

import os

from Django.core.wsgi import get_wsgi_application

os.environ.setdefault("Django_SETTINGS_MODULE", "store.settings")

application = get_wsgi_application()

Wie bereits erwähnt, ist diese Konfiguration für Django2.0. Suchen Sie nach dem richtigen Code für Ihre Version.

DANN Geben Sie den folgenden Code in Ihre ~/.basrc oder ~/.zshrc für zsh ein, jedenfalls geben Sie diesen Code in Ihre richtige Shell-Datei ein.

export SECRET_KEY="type_a_long_random_char_printable_here"
#like this: export SECRET_KEY="hjfhskjh(@/;,?jhod=sjhGJKghgjGHJh#=}"

passierte mir für Django Deployment auf Heroku, nachdem überprüft, nochmals überprüft Ihr SECRET_KEY = "entferne hier alle Zeichen wie diese: $ \` " und Sie haben kein Verzeichnis angegeben, das nicht existiert.

0
yattara