Google App Engine: Random error “ImportError: cannot import name nodes”
我最近访问了我的App Engine网站,该网站运行得很好,没有任何错误,并且显示了一个非常丑陋的错误页面。在管理工具App Engine中记录了以下错误:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | 2012-09-06 10:53:43.938 Traceback (most recent call last): File"/base/python27_runtime/python27_lib/versions/1/google/appengine/runtime/wsgi.py", line 189, in Handle handler = _config_handle.add_wsgi_middleware(self._LoadHandler()) File"/base/python27_runtime/python27_lib/versions/1/google/appengine/runtime/wsgi.py", line 227, in _LoadHandler handler = __import__(path[0]) File"/base/data/home/apps/s~myapp/1.361555922666090832/main.py", line 3, in <module> from controllers.routes import api_routes, web_routes, admin_routes File"/base/data/home/apps/s~myapp/1.361555922666090832/controllers/routes/api_routes.py", line 3, in <module> from ..api import api_obj_controller, api_app_controller, api_path_controller, api_user_controller File"/base/data/home/apps/s~myapp/1.361555922666090832/controllers/api/api_obj_controller.py", line 2, in <module> from ..handlers.api_handler import ApiRequestHandler File"/base/data/home/apps/s~myapp/1.361555922666090832/controllers/handlers/api_handler.py", line 2, in <module> from ..handlers.content_handler import BaseRequestHandler File"/base/data/home/apps/s~myapp/1.361555922666090832/controllers/handlers/content_handler.py", line 3, in <module> from webapp2_extras import jinja2 File"/base/data/home/apps/s~myapp/1.361555922666090832/webapp2_extras/jinja2.py", line 15, in <module> import jinja2 File"/base/python27_runtime/python27_lib/versions/third_party/jinja2-2.6/jinja2/__init__.py", line 33, in <module> from jinja2.environment import Environment, Template File"/base/python27_runtime/python27_lib/versions/third_party/jinja2-2.6/jinja2/environment.py", line 13, in <module> from jinja2 import nodes ImportError: cannot import name nodes W 2012-09-06 10:53:43.967 After handling this request, the process that handled this request was found to have handled too many sequential errors, and was terminated. This is likely to cause a new process to be used for the next request to your application. If you see this message frequently, you are likely returning errors continously from your application. |
因此它继续出现许多错误,但随后又重新开始工作,而没有发布任何新代码。很明显,我担心的是将来如何防止这种情况发生?为什么会这样呢?在没有部署任何代码修复的情况下,它如何能够自行纠正?此错误使我感到紧张,它会为我的客户随机发生。
编辑:
此外,我收到的第一个错误是DeadlineExceededError错误,其中包含消息"此请求导致为您的应用程序启动新进程,从而导致首次加载您的应用程序代码。因此,与您的应用程序的典型请求相比,该请求可能会花费更长的时间并使用更多的CPU。"
因此,从此消息以及Tim所评论的内容是完全有道理的,但是我该如何解决它,使其不再发生?我该怎么办,DeadlineExceededError基本上不会在整个新站点启动之前就将整个站点出错? (也就是说,如果我正确理解的话)
如果我理解正确,您会在某些加载请求中看到DeadlineExceededErrors,但是处理该请求的实例并未被杀死。
这可能是因为您除了块以外还有一些裸露的东西,例如:
1 2 3 4 | try: do something except: do other things |
我认为,您的实例所发生的情况是,此类except子句之一捕获了DeadlineExceededErrors,并且代码继续运行,而不是抛出DeadlineExceededError。如果在导入jinja2期间抛出了DeadlineExceededError,则jinja2模块可以保持半载状态。因此,该实例一直处于损坏状态。
如果正确抛出DeadlineExceededError,则应杀死该实例,以免出现像您一样的损坏实例。
这只是我的假设,请告诉我是否可能是这种情况。