【问题标题】:AppRegistryNotReady: Apps aren't loaded yet. DjangoAppRegistryNotReady:应用程序尚未加载。姜戈
【发布时间】:2016-05-07 07:23:33
【问题描述】:

我正在尝试在谷歌应用引擎上运行 django 1.9。尝试通过 Google API Explorer 访问 API 时出现以下错误。

Traceback (most recent call last):
  File "/home/gemini/softwares/google_appengine/google/appengine/runtime/wsgi.py", line 240, in Handle
    handler = _config_handle.add_wsgi_middleware(self._LoadHandler())
  File "/home/gemini/softwares/google_appengine/google/appengine/runtime/wsgi.py", line 299, in _LoadHandler
    handler, path, err = LoadObject(self._handler)
  File "/home/gemini/softwares/google_appengine/google/appengine/runtime/wsgi.py", line 96, in LoadObject
    __import__(cumulative_path)
  File "/home/gemini/projects/cityguide-backend/src/cityguide/api/services.py", line 9, in <module>
    from cityguide.api.internal.categories import Categories
  File "/home/gemini/projects/cityguide-backend/src/cityguide/api/internal/categories.py", line 10, in <module>
    from cityguide.models import Category
  File "/home/gemini/projects/cityguide-backend/src/cityguide/models.py", line 8, in <module>
    class ContactDetails(models.Model):
  File "/home/gemini/projects/cityguide-backend/src/lib/django/db/models/base.py", line 94, in __new__
    app_config = apps.get_containing_app_config(module)
  File "/home/gemini/projects/cityguide-backend/src/lib/django/apps/registry.py", line 239, in get_containing_app_config
    self.check_apps_ready()
  File "/home/gemini/projects/cityguide-backend/src/lib/django/apps/registry.py", line 124, in check_apps_ready
    raise AppRegistryNotReady("Apps aren't loaded yet.")
AppRegistryNotReady: Apps aren't loaded yet.

我已经添加了

builtins:
- deferred: on
- remote_api: on
- django_wsgi: on

handlers:
 - url: .*
   script: mysite.wsgi.application

env_variables:
  DJANGO_SETTINGS_MODULE: 'mysite.settings'

在app.yaml 文件中。

wsgi.py 看起来像

import os

from django.core.wsgi import get_wsgi_application
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings")

application = get_wsgi_application()

我尝试在models.py 的顶部添加django.setup() 行,但它显示了不同的错误。

ERROR    2016-02-01 10:03:02,918 wsgi.py:263] 
Traceback (most recent call last):
  File "/home/gemini/softwares/google_appengine/google/appengine/runtime/wsgi.py", line 240, in Handle
    handler = _config_handle.add_wsgi_middleware(self._LoadHandler())
  File "/home/gemini/softwares/google_appengine/google/appengine/runtime/wsgi.py", line 299, in _LoadHandler
    handler, path, err = LoadObject(self._handler)
  File "/home/gemini/softwares/google_appengine/google/appengine/runtime/wsgi.py", line 96, in LoadObject
    __import__(cumulative_path)
  File "/home/gemini/projects/cityguide-backend/src/cityguide/api/services.py", line 9, in <module>
    from cityguide.api.internal.categories import Categories
  File "/home/gemini/projects/cityguide-backend/src/cityguide/api/internal/categories.py", line 10, in <module>
    from cityguide.models import Category
  File "/home/gemini/projects/cityguide-backend/src/cityguide/models.py", line 6, in <module>
    django.setup()
  File "/home/gemini/projects/cityguide-backend/src/lib/django/__init__.py", line 18, in setup
    apps.populate(settings.INSTALLED_APPS)
  File "/home/gemini/projects/cityguide-backend/src/lib/django/apps/registry.py", line 115, in populate
    app_config.ready()
  File "/home/gemini/projects/cityguide-backend/src/lib/django/contrib/admin/apps.py", line 22, in ready
    self.module.autodiscover()
  File "/home/gemini/projects/cityguide-backend/src/lib/django/contrib/admin/__init__.py", line 26, in autodiscover
    autodiscover_modules('admin', register_to=site)
  File "/home/gemini/projects/cityguide-backend/src/lib/django/utils/module_loading.py", line 50, in autodiscover_modules
    import_module('%s.%s' % (app_config.name, module_to_search))
  File "/usr/lib/python2.7/importlib/__init__.py", line 37, in import_module
    __import__(name)
  File "/home/gemini/projects/cityguide-backend/src/cityguide/admin.py", line 2, in <module>
    from cityguide.models import Category
ImportError: cannot import name Category
ERROR    2016-02-01 10:03:02,919 wsgi.py:263] 
Traceback (most recent call last):
  File "/home/gemini/softwares/google_appengine/google/appengine/runtime/wsgi.py", line 240, in Handle
    handler = _config_handle.add_wsgi_middleware(self._LoadHandler())
  File "/home/gemini/softwares/google_appengine/google/appengine/runtime/wsgi.py", line 299, in _LoadHandler
    handler, path, err = LoadObject(self._handler)
  File "/home/gemini/softwares/google_appengine/google/appengine/runtime/wsgi.py", line 96, in LoadObject
    __import__(cumulative_path)
  File "/home/gemini/projects/cityguide-backend/src/cityguide/api/services.py", line 9, in <module>
    from cityguide.api.internal.categories import Categories
  File "/home/gemini/projects/cityguide-backend/src/cityguide/api/internal/categories.py", line 10, in <module>
INFO     2016-02-01 10:03:03,000 module.py:794] default: "POST /_ah/spi/BackendService.getApiConfigs HTTP/1.1" 500 -
    from cityguide.models import Category
INFO     2016-02-01 10:03:03,001 module.py:794] default: "POST /_ah/spi/BackendService.getApiConfigs HTTP/1.1" 500 -
  File "/home/gemini/projects/cityguide-backend/src/cityguide/models.py", line 6, in <module>
INFO     2016-02-01 10:03:03,001 module.py:794] default: "GET /_ah/api/discovery/v1/apis HTTP/1.1" 500 60
    django.setup()
INFO     2016-02-01 10:03:03,001 module.py:794] default: "GET /_ah/api/discovery/v1/apis HTTP/1.1" 500 60
  File "/home/gemini/projects/cityguide-backend/src/lib/django/__init__.py", line 18, in setup
    apps.populate(settings.INSTALLED_APPS)
  File "/home/gemini/projects/cityguide-backend/src/lib/django/apps/registry.py", line 78, in populate
    raise RuntimeError("populate() isn't reentrant")
RuntimeError: populate() isn't reentrant

此问题的临时解决方案:

看来我需要先打开主页。这样它就会加载数据库,因为我让主页返回所有数据库表内容。一旦主页上显示了 db 列表,我们就可以调用 Google API Explorer。

有没有办法改进这个解决方案?

【问题讨论】:

  • 错误信息通常表示application = get_wsgi_application() 没有运行。例如,如果您直接导入 django 模型。我认为将 python 模型连接到数据库需要一些设置过程。
  • 我不确定这一步会发生什么File "/home/gemini/softwares/google_appengine/google/appengine/runtime/wsgi.py", line 96, in LoadObject __import__(cumulative_path),但它必须是与 django 项目中的不同的 wsgi.py。可能get_wsgi_application() 步骤没有运行。
  • @AvinashRaj 如果您尝试使用 Django 的 manage.py runserver 运行您的网站,它会起作用吗?
  • @Louis 不,它不会..

标签: python django google-app-engine


【解决方案1】:

您应该首先在脚本中以这种方式启动 django:

import django
django.setup()

见https://docs.djangoproject.com/en/1.9/ref/applications/#django.setup

您还可以查看链接的“故障排除”部分,了解解决此特殊异常的其他可能性。

通过在services.py 文件的顶部添加上述两行为我解决了这个问题..

【讨论】:

  • 它可能必须添加到此文件中。 /home/gemini/softwares/google_appengine/google/appengine/runtime/wsgi.py
  • @HåkenLid 请查看我的更新。我添加了一个临时解决方案。
  • @AvinashRaj 我无法提出更好的永久解决方案。我从未将 django 与 google app engine 或 Google API explorer 一起使用。
【解决方案2】:

在你的脚本中启动 django 为:

from django_root_app.wsgi import application

【讨论】:

    猜你喜欢
    • 2020-08-11
    • 2021-02-09
    • 1970-01-01
    • 2014-12-04
    • 1970-01-01
    • 1970-01-01
    • 2016-03-10
    • 2018-07-12
    • 1970-01-01
    相关资源
    最近更新 更多