3

我尝试使用 AppEngine 的 modules api for python 来获取使用基本缩放的模块的实例数。在我的模块的 yaml 文件中,我明确设置了max_instances参数。我希望get_num_instances()将返回该参数的值。

问题:每当我触发modules.get_num_instances(...)时,该方法都会引发InvalidVersionError

我的应用程序只有一个版本,“v1”。当我将版本参数设置为“v1”甚至将其设置为无(根据文档采用当前版本)时,会引发错误。

在我调用 get_num_instances() 的那一刻,该特定模块中没有活动实例。这有什么不同吗?

我还没有找到在不引发错误的情况下调用此方法的方法。该问题出现在 GAE 和 dev_server 中。我正在使用 SDK 版本 1.9.18。

更新 这是模块的 yaml 文件

application: my_gae_app
module: my_module
version: v1
runtime: python27
api_version: 1
threadsafe: true
instance_class: B2
basic_scaling:
  max_instances: 3
  idle_timeout: 1m

inbound_services:
- warmup

skip_files:
- ^(.*/)?#.*#
- ^(.*/)?.*~
- ^(.*/)?.*\.py[co]
- ^(.*/)?.*/RCS/.*
- ^(.*/)?\..*
- ^(.*/)?tests$
- ^(.*/)?test$
- ^Makefile
- ^COPYING.LESSER
- ^README.md
- \.gitignore
- ^\.git/.*
- \.*\.lint$
- ^\localdata/.*

builtins:
- appstats: on #/_ah/stats/
- remote_api: on #/_ah/remote_api/
- deferred: on

handlers:
- url: /.*
  script: my_start_script.the_wsgi_app

libraries:
- name: jinja2
  version: "2.6"
- name: webapp2
  version: "2.5.2"
- name: markupsafe
  version: "0.15"
- name: webob
  version: "1.2.3"
- name: ssl
  version: latest

我试过调用 get_num_instances() 如下:

  • get_num_instances(module='my_module', version='v1')
  • get_num_instances(module='my_module')
  • get_num_instances()

我还仔细检查了模块名称的拼写,modules.get_modules()正确返回了名称。我对版本做了同样的事情, modules.get_current_version_name()返回“v1”。

4

1 回答 1

0

如源代码文档 [1] 所述,此方法仅适用于手动缩放实例。自动缩放的实例(包括基本缩放)将引发该错误。

[1] https://code.google.com/p/googleappengine/source/browse/trunk/python/google/appengine/api/modules/modules.py?r=411#236

更新:我得到了谷歌云支持的官方确认,确实,这只是一个简单的文档错误,所以正如我在原始答案中所假设的那样,get_num_instances它仅适用于手动缩放的实例/模块/版本。

于 2015-03-01T10:57:22.357 回答