后端实例小时加起来没有任何后端

时间:2014-11-05 15:01:45

标签: python google-app-engine

我的项目是一个简单的JSON + REST api服务器,它读取/写入ndb并使用JSON字典进行响应。我的项目中没有backends.yaml文件。我的app.yaml的内容是:

application: my-app
version: 1
runtime: python27
api_version: 1
threadsafe: yes

handlers:
- url: /api/v1/.*
  script: gprofile.application


libraries:
- name: webapp2
  version: "2.5.2"
- name: ssl
  version: latest
- name: jinja2
  version: latest

我项目中唯一的其他yaml文件是一些自动生成的index.yaml文件。 然而,我有后端堆积的时间。根据仪表板,我每小时累积8个后端实例小时,即我以某种方式运行8个后端实例。在我的项目目录中运行appcfg.py -v backends . list会给出以下输出:

Application: my-app
Warning: This application uses Backends, a deprecated feature that has been replaced by Modules, which offers additional functionality. Please convert your backends to modules as described at: https://developers.google.com/appengine/d
Host: appengine.google.com
2014-11-05 20:23:29,571 INFO appengine_rpc_httplib2.py:268 Too many retries for url https://appengine.google.com/api/backends/list?app_id=my-app
Error 500: --- begin server output ---
Server Error (500)
A server error has occurred.
--- end server output ---

我注意到的另一个奇怪的事情是,尽管没有额外的yaml文件,我仍然定义了3个额外的模块(除了默认模块)。其中一个被标记为Resident,这意味着我无法将其从仪表板上关闭。

任何人都可以解释我是如何在没有任何额外的yaml文件的情况下定义额外的模块的,以及为什么我在没有backend.yaml的情况下为后端付费。

更新1:我可以通过在“Compute> App Engine> Versions”下的仪表板中手动删除未定义的模块来删除它们。仍然无法弄清楚他们是如何到达那里的。

更新2:我在开发过程中早先定义了几个后端。但是,yaml以及它们的相关代码已被删除。是否有可能即使在更新我的项目之后旧的后端仍然存在?如果是这样,当appcfg甚至无法列出它们时,我将如何删除它们。

2 个答案:

答案 0 :(得分:1)

我想我可能已经弄明白了这个问题(对我的假设的确认将会受到赞赏)

我认为,一旦将yaml文件(定义模块或队列等)添加到app-engine,您就不能删除yaml文件并更新项目,并期望现有资源将被自动删除。必须将它们从仪表板本身中移除。即使这样做,也必须首先上传新的yaml文件,这些文件表明它们不再被定义。

例如。在队列的情况下,我必须首先上传一个空的queue.yaml,然后才能删除在开发期间很久以前创建的任务队列,并且从未使用过。

对于模块,我必须去" Compute> App Engine>版本"并手动删除模块(即使这些模块未在源中的任何位置定义)。

我积累的后端时间可能是因为Resident模块,因为删除它后,现在当我运行appcfg.py backends . list时,我得到了预期的No backends configured for app: s~my-app响应。我之前得到的500响应可能是因为有问题的模块没有与之关联的源代码。并且实例时间正在累积,因为app-engine一再尝试启动此模块并失败(因为它没有源代码)

再一次,这都是基于删除yaml文件并不意味着删除资源的假设,这很难相信。如果是这种情况,那么谷歌应该在某处记录这种行为。

答案 1 :(得分:0)

即使它应该默认选择此项,我也会尝试将“模块”键添加到您的app.yaml:

   application: my-app
   module: default
   version: 1
   runtime: python27
   api_version: 1
   threadsafe: yes