django - django.core.exceptions.AppRegistryNotReady:加载 wsgi.py 时尚未加载应用程序
问题描述
我无法确定 Django 和 wsgi 的问题。该应用程序在我的本地测试服务器上运行良好,并且在本地 apache WAMP 设置上也运行良好(没有任何 venvs)。再次将其部署到我们的 Linux 服务器时,本地测试服务器会运行(与 makemigrations、migrate 或 check 一样):
python3 manage.py runserver
/home/www-test/myapp-venv/lib/python3.7/site-packages/requests/__init__.py:91: RequestsDependencyWarning: urllib3 (1.25.8) or chardet (2.0.3) doesn't match a supported version!
RequestsDependencyWarning)
/home/www-test/myapp-venv/lib/python3.7/site-packages/requests/__init__.py:91: RequestsDependencyWarning: urllib3 (1.25.8) or chardet (2.0.3) doesn't match a supported version!
RequestsDependencyWarning)
Performing system checks...
System check identified no issues (0 silenced).
March 18, 2020 - 16:22:20
Django version 2.2.11, using settings 'myapp.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
python3 manage.py check
/home/www-test/myapp-venv/lib/python3.7/site-packages/requests/__init__.py:91:
RequestsDependencyWarning: urllib3 (1.25.8) or chardet (2.0.3) doesn't match a supported version!
RequestsDependencyWarning)
System check identified no issues (0 silenced).
但是,当我尝试在 Linux 机器上使用 wsgi/Apache 部署它时,我得到了
Traceback (most recent call last):
File "myapp/wsgi.py", line 20, in <module>
application = get_wsgi_application()
File "/home/www-test/.local/lib/python3.7/site-packages/django/core/wsgi.py", line 12, in get_wsgi_application
django.setup(set_prefix=False)
File "/home/www-test/.local/lib/python3.7/site-packages/django/__init__.py", line 24, in setup
apps.populate(settings.INSTALLED_APPS)
File "/home/www-test/.local/lib/python3.7/site-packages/django/apps/registry.py", line 91, in populate
app_config = AppConfig.create(entry)
File "/home/www-test/.local/lib/python3.7/site-packages/django/apps/config.py", line 90, in create
module = import_module(entry)
File "/usr/lib/python3.7/importlib/__init__.py", line 127, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 1006, in _gcd_import
File "<frozen importlib._bootstrap>", line 983, in _find_and_load
File "<frozen importlib._bootstrap>", line 953, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
File "<frozen importlib._bootstrap>", line 1006, in _gcd_import
File "<frozen importlib._bootstrap>", line 983, in _find_and_load
File "<frozen importlib._bootstrap>", line 953, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
File "<frozen importlib._bootstrap>", line 1006, in _gcd_import
File "<frozen importlib._bootstrap>", line 983, in _find_and_load
File "<frozen importlib._bootstrap>", line 967, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 677, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 728, in exec_module
File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
File "/home/www-test/myapp/myapp/maintenance.py", line 9, in <module>
from imageplus.models import ImagePlus
File "/home/www-test/myapp/imageplus/models.py", line 6, in <module>
from userprofile.models import Userprofile
File "/home/www-test/myapp/userprofile/models.py", line 5, in <module>
from django.contrib.auth.models import User
File "/home/www-test/.local/lib/python3.7/site-packages/django/contrib/auth/models.py", line 2, in <module>
from django.contrib.auth.base_user import AbstractBaseUser, BaseUserManager
File "/home/www-test/.local/lib/python3.7/site-packages/django/contrib/auth/base_user.py", line 47, in <module>
class AbstractBaseUser(models.Model):
File "/home/www-test/.local/lib/python3.7/site-packages/django/db/models/base.py", line 103, in __new__
app_config = apps.get_containing_app_config(module)
File "/home/www-test/.local/lib/python3.7/site-packages/django/apps/registry.py", line 252, in get_containing_app_config
self.check_apps_ready()
File "/home/www-test/.local/lib/python3.7/site-packages/django/apps/registry.py", line 135, in check_apps_ready
raise AppRegistryNotReady("Apps aren't loaded yet.")
django.core.exceptions.AppRegistryNotReady: Apps aren't loaded yet.
我怀疑它与 venv 或缺少路径有关,但我不知道从哪里开始。wsgi.py 看起来像这样:
"""
WSGI config for myapp 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.2/howto/deployment/wsgi/
"""
import os, sys
from django.core.wsgi import get_wsgi_application
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myapp.settings')
sys.path.append('/home/www-test/myapp/myapp')
sys.path.append('/home/www-test/myapp')
sys.path.append('/home/www-test/myapp-venv/lib/python3.7/site-packages')
application = get_wsgi_application()
任何关于从哪里开始寻找此错误的建议将不胜感激。
[编辑:]
我将错误进一步追踪到 myapp 的 apps.py,如下所示:
from django.apps import AppConfig
from threading import Thread
from django.utils import timezone
import time
import schedule
import os
from decouple import config
class SebastianConfig(AppConfig):
name = 'myapp'
def ready(self):
if os.environ.get('RUN_MAIN', None) == 'true':
return
import myapp.signals
if config('AUTOMAINTENANCE', cast=bool)==False:
print ('[myApp]: auto maintenance is disabled')
return
from myapp.maintenance import maintenance
def scheduler_demon():
while True:
schedule.run_pending()
time.sleep(60)
def aliveping():
print(f'[myApp]:ping {timezone.now()}')
schedule.every(5).minutes.do(aliveping)
schedule.every(24).hours.do(maintenance)
schedule.run_all()
worker=Thread(target=scheduler_demon,args=(),)
worker.daemon=True
worker.start()
从理论上讲,这不会像我对 Django 的理解那样引起问题。它也是唯一进口的现场维护。
现在有趣的是,我删除了那段话,wsgi 就像一个魅力一样工作。我再次添加了这段话,令人惊讶的是它仍然像魅力一样起作用?!!?
解决方案
推荐阅读
- html - 将 div 放在中心并将图像与其“左侧”对齐
- regex - 正则表达式仅在与其他模式不匹配时才匹配特定模式
- python - 张量的形状
- c++ - 自定义 unary/binaryExpr() eigen3 的参数
- ios - 在客户端应用商店上传应用与 .p12 和 .mobileprovision 连接
- google-apps-script - 在 UNIQUE 公式列出另一个值后更新单元格值
- angular - 无法读取未定义的属性“user_data” - NGRX
- javascript - 带有参数的函数的JavaScript问题
- python-3.x - 校准和保持数据:AttributeError:“int”对象没有属性“n”
- javascript - 在视图框中使用变量