Google App引擎需要定期重启

时间:2016-02-09 10:31:30

标签: google-app-engine pyramid

当我将它推送到app引擎时,我有一个工作正常的模块。当它工作时,它可以很好地记录日志,并且可以在控制台日志查看器中访问日志。但过了一段时间后它才停止工作,当我尝试访问任何网址时,给我500个没有信息的服务器错误(它只是说等待30秒可能是一个好主意)。发生这种情况时,不会记录任何请求。

如果我重新启动模块(通过将我的代码推送到应用程序引擎),那么它会再次运行一段时间。

模块正在运行Pyramid应用程序,配置文件看起来像:

application: my_app
module: my_module
version: dev
runtime: python27
api_version: 1
threadsafe: false

instance_class: B2
basic_scaling:
  max_instances: 2
  idle_timeout: 10m

handlers:
- url: /actions/.*
  script: my_module.application
  login: admin
- url: /.*
  script: my_module.application

builtins:
- appstats: off

libraries:
- name: webob
  version: latest
- name: setuptools
  version: latest

includes:
- mapreduce/include.yaml

我认为正在发生的事情是它正在达到空闲超时并关闭。我需要向模块发出请求以重新打开它。我该怎么做?

如果您需要更多信息,请告诉我,在此阶段我是应用引擎菜鸟。任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:2)

即使您达到空闲超时,AppEngine也会在新请求进入时旋转新实例。

使用Cloud Debugger检查应用程序的状态。调试器使您可以更轻松地查看应用程序状态,并了解在应用程序运行一段时间后会发生什么。

答案 1 :(得分:2)

当模块启动时,App Engine会调用url / _ah / start。你不能处理这个请求。 在您的my_module.application中,您需要添加与此请求匹配的处理程序:

    def get(self):
        # Let module start
        if "X-Appengine-Cron" in self.request.headers or "X-AppEngine-TaskName" in self.request.headers  or "X-Appengine-Failfast" in self.request.headers:
            return

答案 2 :(得分:2)

检查启动状态https://cloud.google.com/appengine/docs/python/modules/#Python_Instance_states

上的文档

如果您的处理程序可以优雅地处理404,那么您当前的默认处理程序/.*应该能够处理/_ah/start

这就是我如何处理创业公司。通过主处理程序,可以使用未找到的默认金字塔来处理不存在的URL请求。

我注册了config.add_notfound_view(notfound)