应用程序引擎"模块"是应用程序引擎中的一个新功能(也是实验性的,名称令人困惑):https://developers.google.com/appengine/docs/python/modules.开发人员被敦促将"后端"功能的使用转换为这一新功能的使用。
启动模块实例似乎有两种方法:向其发送HTTP请求(即在appname
应用程序和modulename
模块的http://modulename.appname.appspot.com
),或调用google.appengine.api.modules.start_module()
。
简单的方法
启动模块实例的简单方法似乎是创建一个HTTP请求。然而,在我的情况下,这只会导致两种结果,这两种结果都不是我想要的:
-
如果我使用应用程序定义的后端名称,即
http://backend.appname.appspot.com
,则请求会被正确路由到后端并被正确拒绝(因为后端访问在默认情况下被定义为私有)。 -
任何其他操作都会导致请求被路由到默认模块的唯一前端实例,甚至使用随机字符串作为模块名称,例如
http://sdlsdjfsldfsdf.appname.appspot.com
。这甚至适用于虚构的实例ID,例如http://99.sdlsdjfsldfsdf.appname.appspot.com
等。当然(这是问题所在),也适用于我的模块的实际名称。
通过API启动
文档中说,使用模块的名称和版本调用start_module()
应该会启动指定模块的指定版本。然而,每当我用有效的参数调用这个函数时,我都会得到一个UnexpectedStateError
。
不幸的事态
因为我无法实现这一点,我想知道文档中是否有一些微妙之处可能没有提到。我的设置非常简单,所以我想知道这是否是一个普遍存在的问题,有人已经找到了解决方案。
原来版本不能是数字。这个问题的出现似乎是因为我们模块的版本是"1"而不是(例如)"v1"。
对于模块,他们稍微改变了一些术语。过去的"后端"现在是"基本缩放"或"手动缩放"实例。
"自动缩放"one_answers"基本缩放"实例在处理请求时启动,而"手动缩放"实例则持续运行。
通常,要启动一个实例,您会向模块的URL发送HTTP请求。
start_module()似乎对具有"手动缩放"实例的模块或使用stop_module()重新启动已停止的模块的用途有限。
您可以添加:
login: admin
到后端的处理程序。通过这种方式,管理员用户可以调用您的后端并触发它运行。使用login:admin,您还可以从应用程序中的elsewhwere(即从前端)发出URLFetch请求来触发后端。