运行时错误:应用程序注册表尚未准备好
Posted
技术标签:
【中文标题】运行时错误:应用程序注册表尚未准备好【英文标题】:Runtime error:App registry isn't ready yet 【发布时间】:2014-05-09 19:27:28 【问题描述】:我正在尝试创建一个用测试用户填充数据库的脚本。我是 Django 和 Python 的新手。我不断得到:
Runtime error: App registry isn't ready yet.
这是输出和错误:
starting population script
Traceback (most recent call last):
File "populate.py", line 32, in <module>
populate()
File "populate.py", line 22, in populate
i.save()
File "c:\Python27\lib\site-packages\django-1.7a2-py2.7.egg\django\db\models\base.py", line 603, in save
force_update=force_update, update_fields=update_fields)
...
...
...
File "c:\Python27\lib\site-packages\django-1.7a2-py2.7.egg\django\apps\registry.py", line 156, in get_models
self.check_ready()
File "c:\Python27\lib\site-packages\django-1.7a2-py2.7.egg\django\apps\registry.py", line 119, in check_ready
raise RuntimeError("App registry isn't ready yet.")
RuntimeError: App registry isn't ready yet.
代码如下:
import os
import datetime
def populate():
freer = User.objects.create_user( 'joyyie', 'lolcats@gmail.com', 'e')
cat = User.objects.create_user( 'steve', 'l2olcats@gmail.com', 'e')
dog = User.objects.create_user( 'aasd', 'lo3lcats@gmail.com', 'ad')
cow = User.objects.create_user( 'sadsfa', 'lol4cats@gmail.com', 't' )
pig = User.objects.create_user( 'regibald', 'lolc5ats@gmail.com', '0')
donkey = User.objects.create_user( 'turnip', 'lolca6ts@gmail.com', 'pop')
human = User.objects.create_user( 'tutu', 'lolcat7s@gmail.com', 'pa')
a = [freer,cat,dog,cow,pig,donkey,human]
for i in a:
i.first_name= 'jackee'
i.is_superuser=True
i.is_staff=False
i.date_joined=datetime.datetime.today()
i.last_login=datetime.datetime.today()
i.save()
if __name__=='__main__':
print "starting population script"
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'infosmos.settings')
from django.conf import settings
from django.db import models
from django.contrib.auth.models import User
populate()
有没有办法通过使用signal
或其他方式强制用户配置文件创建等待注册表应用程序?
【问题讨论】:
【参考方案1】:[django 1.7] 您希望运行的独立脚本,导入 django 和如下设置
import os
import django
[...]
if __name__ == '__main__':
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings')
django.setup()
【讨论】:
仍然是设置默认环境变量和设置应用程序以解决应用程序注册表问题的完美解决方案。【参考方案2】:我发现,如果我使用execfile()
命令通过manage.py
shell 运行填充,那么它会正常运行。在我开始修改数据库或运行外部代码之前,一切都需要设置。感谢 lanzz 的提示。
【讨论】:
您可能希望将其设为管理命令docs.djangoproject.com/en/1.7/howto/custom-management-commands【参考方案3】:根据 Django 的 1.7 发行说明,在“启动顺序”子句下,这是已知且预期的行为:
另一个常见的罪魁祸首是 django.contrib.auth.get_user_model()。使用 AUTH_USER_MODEL 设置在导入时引用用户模型。
这应该可以解决问题
供参考: https://docs.djangoproject.com/en/dev/releases/1.7/#app-loading-changes
【讨论】:
我没有看到上述代码中使用了django.contrib.auth.get_user_model
,也无法想象该代码中的任何内容如何利用AUTH_USER_MODEL
设置。对我来说,the missing django.setup()
call 似乎更有可能出现问题。以上是关于运行时错误:应用程序注册表尚未准备好的主要内容,如果未能解决你的问题,请参考以下文章
Microsoft.ACE.OLEDB.12.0 尚未注册”错误