最近需要着手写项目,于是乎翻开了电脑里尘封了一年之久CMDB项目代码,打算来一个二次加工。然后移植到Linux里配置完环境一执行......酸爽!处处报错!一咬牙一跺脚,通宵改改改。 经过艰难的战斗,大部分问题都决绝了,就是有个错误无论如何都改不出来。翻遍了Google和度娘,甚至有很多答案把我带到了新的坑里。就是下面这个BUG:
[root@CentOS CMDB]# python3 manage.py runserver
Unhandled exception in thread started by <function check_errors.<locals>.wrapper at 0x7f8a621f7730>
Traceback (most recent call last):
File "/usr/local/lib/python3.6/site-packages/django/utils/autoreload.py", line 228, in wrapper
fn(*args, **kwargs)
File "/usr/local/lib/python3.6/site-packages/django/core/management/commands/runserver.py", line 117, in inner_run
autoreload.raise_last_exception()
File "/usr/local/lib/python3.6/site-packages/django/utils/autoreload.py", line 251, in raise_last_exception
six.reraise(*_exception)
File "/usr/local/lib/python3.6/site-packages/django/utils/six.py", line 685, in reraise
raise value.with_traceback(tb)
File "/usr/local/lib/python3.6/site-packages/django/utils/autoreload.py", line 228, in wrapper
fn(*args, **kwargs)
File "/usr/local/lib/python3.6/site-packages/django/__init__.py", line 27, in setup
apps.populate(settings.INSTALLED_APPS)
File "/usr/local/lib/python3.6/site-packages/django/apps/registry.py", line 85, in populate
app_config = AppConfig.create(entry)
File "/usr/local/lib/python3.6/site-packages/django/apps/config.py", line 94, in create
module = import_module(entry)
File "/usr/local/lib/python3.6/importlib/__init__.py", line 126, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 994, in _gcd_import
File "<frozen importlib._bootstrap>", line 971, in _find_and_load
File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 665, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 678, in exec_module
File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
File "/home/visitor/桌面/CMDB/users/__init__.py", line 1, in <module>
from users import models
File "/home/visitor/桌面/CMDB/users/models.py", line 5, in <module>
class superUser(models.Model):
File "/usr/local/lib/python3.6/site-packages/django/db/models/base.py", line 110, in __new__
app_config = apps.get_containing_app_config(module)
File "/usr/local/lib/python3.6/site-packages/django/apps/registry.py", line 247, in get_containing_app_config
self.check_apps_ready()
File "/usr/local/lib/python3.6/site-packages/django/apps/registry.py", line 125, in check_apps_ready
raise AppRegistryNotReady("Apps aren't loaded yet.")
django.core.exceptions.AppRegistryNotReady: Apps aren't loaded yet.
就是这个BUG,网上搜索出来的都是让加django.setup(),那种方式所针对的报错内容和我这个不完全一致,一度把我带进坑里。Apps aren't loaded yet 报错是一个比较大的范围,本文的方法适不适用于你,一定要看清开头的报错内容是否与我的一致。
下面来说一下报错原因和解决方式: 很显然报错说是 models.py文件的class superUser(models.Model)有问题,这里很显然没问题啊.....于是我就注释了models中所有的class,然后python manage.py check发现不报错了。一开始感觉问题在这里面,但是这里又实在看不出没问题,后来我才想到是不时因为__init__.py文件里引用了models的问题。于是跑到__init__.py下取消注释,发现可行。F******K!我这才发现之前想在初始化时执行一个功能,于是写在了__init__.py文件里,但是当初太菜,写的函数依赖了models.py文件所以才有了这么一个引用。于是乎,删掉from users import models即可。
总结:django里App的__init__.py文件中千万不要脑残的加上models的引用!!!同理也不要引用同级的views和urls!!!