问题
It's my first time trying to deploy a Django app(django 2.0.1)(Python 3.6) to pythonanywhere, it is a simple portfolio app with no models, no bootstrap. Just Django, HTML, CSS & Javascript.
After pulling it from the Github repo onto pythnanywhere with their bash console, I run :
python manage.py migrate
& was hit with this error :
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.
I tired looking for solutions everywhere I could possibly find but nothing really helps, I've even tried adding this line to my settings.py :
import django
django.setup()
underneath this line :
SECRET_KEY = os.environ.get("SECRET_KEY")
as suggested from this post, but to no avail.
Here is my 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,
]
I am really lost on this, hoping someone can help shed some light on what's the real problem here.
回答1:
Overcame similar situation just now.
All you really need is this:
import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "your_project.settings")
And then these lines:
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
After that you can easily import models without AppRegistryNotReady: Apps aren't loaded yet.
UPDATE: This is really exactly the 4 code lines from wsgi.py file in your project's folder.
FOR DJANGO 3.0 In Django 3+ an extra variable is needed to resolve sync/async confusing:
os.environ["DJANGO_ALLOW_ASYNC_UNSAFE"] = "true"
回答2:
Please run check django-admin command to see if it have detected any errors.
python manage.py check
and/or
django-admin check
回答3:
The Django docs say that django.setup loads the settings from settings.py as its first act, so it seems like a bad idea to run that in settings.py.
Try commenting out apps in INSTALLED_APPS one at a time - you'll probably find that one of them is not loading for some reason. Once you know which one it is, you can work out what is wrong with it.
回答4:
My problem was that I was trying to import before the setup was ran. Here's my solution: make the import after the 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!!
回答5:
There could be several reasons for this error but all of them are related to project/settings.py
file.
- Check if you have initialised
SECRET_KEY
in it. - Check if you have application in
INSTALLED_APPS
and is not installed.
回答6:
First at all: check if you have the same code like below in yourproject.wsgi.py
"""
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()
Like mentioned this config is for django2.0, seek to have the rigth code for your version.
THEN Type this below code in your ~/.basrc or ~/.zshrc for zsh, anyway type this code in your rigth shell file.
export SECRET_KEY="type_a_long_random_char_printable_here"
#like this: export SECRET_KEY="hjfhskjh(@/;,?jhod=sjhGJKghgjGHJh#=}"
happened me for django deployment on heroku , after over checked, checked again your SECRET_KEY="remove here all char like those: $\` " and you hav'nt specified any directory that does'nt exist.
回答7:
Just import inside ready()
method:
def ready(self):
print('Sent From ready')
from django.db.models.signals import post_save
from yourapp.api.signals import post_save_user_receiver
post_save.connect(post_save_user_receiver, sender=settings.AUTH_USER_MODEL)
回答8:
It took me a while to understand that every time you run manage.py somecommand
, you need to provide the same settings / environment variables that you need when you run ./manage.py runserver
.
For example I load SECRET_KEY in from an environment variable in a file called .env
. So I need to do this in order to make and run migrations:
. .env
./manage.py makemigrations --settings=djangoproject.settings.development
./manage.py migrate --settings=djangoproject.settings.development
回答9:
In my case it was a missing python package which was in use in the application that caused the issue.
So check if all applications / packages in use are effectively installed in your python (virtual) environment.
The applications you can find in the INSTALLED_APPS (see your settings.py file).
Python packages can be used anywhere in your code so can be more difficult to trace down. But usually the error message will hint at the missing package as well.
来源:https://stackoverflow.com/questions/48163641/django-core-exceptions-appregistrynotready-apps-arent-loaded-yet-django-2-0