Google app engine Google应用程序引擎Python 3.7中的多种服务
我有一个应用程序在Python 2.7标准框架下运行良好,在3.7框架下作为两个独立的应用程序运行良好,但我不知道如何将它们配置为具有两个服务的单个应用程序。Google app engine Google应用程序引擎Python 3.7中的多种服务,google-app-engine,python-3.7,app.yaml,Google App Engine,Python 3.7,App.yaml,我有一个应用程序在Python 2.7标准框架下运行良好,在3.7框架下作为两个独立的应用程序运行良好,但我不知道如何将它们配置为具有两个服务的单个应用程序。 main.app由以下两行组成(与2.7框架中使用的内容并行) main的app.yaml只包含运行时:python37 main(app和update)下的两个python包都有自己的app.yaml,正如新的部署文档所说的那样。问题出在更新包中。我曾经指定一个处理程序,它的脚本是:main.update。这不再允许(只允许自动)。请注
main.app由以下两行组成(与2.7框架中使用的内容并行) main的app.yaml只包含运行时:python37 main(app和update)下的两个python包都有自己的app.yaml,正如新的部署文档所说的那样。问题出在更新包中。我曾经指定一个处理程序,它的脚本是:main.update。这不再允许(只允许自动)。请注意,app包工作正常,因为app是默认入口点。我推测,当运行更新服务时,指定去哪里的新方法是使用entrypoint,但即使在将gunicorn添加到需求之后,yaml语句
entrypoint: gunicorn b :$PORT main::update
这似乎是必需的,只是给了我一个500 http返回。我还尝试了main.update之类的变体,但没有成功
main.py
app.yaml
-->/app
-----> /app/__init__.py
-----> /app/app.yaml
-->/update
------> /update/__init__.py
------> /update/app.yaml
包和其他东西都有模板子目录,但它们作为单独的版本运行时都可以正常工作
以下是我在更新目录中尝试的yaml:
runtime: python37
service: update
entrypoint: gunicorn -b :$PORT main.update
下面是应用程序目录中的yaml,它似乎工作正常:
runtime: python37
service: default
handlers:
- url: /static
static_files: static/\1
upload: static/(.*\.(bmp|gif|ico|jpeg|jpg|png))
automatic_scaling:
max_idle_instances: 2
max_concurrent_requests: 12
查看您所描述的内容,并假设您的目标目录结构与您引用的文档中提到的目录结构类似,我发现了一些问题 在应用程序的顶部/根目录中,在服务目录的上方,即
main.py
和app.yaml
文件中,仍然有代码,这些代码是服务无法访问的。尤其是app.yaml
文件可能会导致问题,因为它可能会意外地被解释为单个服务应用程序的.yaml
文件。我会处理掉这些文件
我只会在应用程序的顶级目录中保存文件,如果适用,还将保存包含多个服务共享的代码的文件,我会在共享代码的每个服务中对这些文件进行符号链接,请参阅
在update/app.yaml
文件中,您对入口点配置使用了错误的语法:
- 在模块名和WSGI应用程序变量名之间应该有一个分隔符,即
,而不是main:update
或main::update
。这假设您有一个main.update
文件,该文件定义了名为update/main.py
的WSGI兼容应用程序(如果该应用程序名为update
,则您将使用app
)main:app
- 在一个示例中,您使用了
而不是b
-b
app/app.yaml
文件中定义入口点。您的default
服务很可能满足自动添加默认入口点的条件,请参阅:
- 应用程序目录的根目录包含一个名为
的WSGI兼容对象的app
文件main.py
不包含入口点字段app.yaml
- 您的应用程序不包含
或Pipfile
文件Pipfile.lock
entrypoint: gunicorn -b :$PORT main:app
显示应用程序目录结构、2.yaml文件和包含服务器应用程序的2个python文件(与配置的入口点匹配,如果有)。也许看看(第一代,虽然,但这不应该是一个问题)。我看了看,这是我过去的方式,但新的文档[这里]()说这不起作用。但我会在上面编辑我不知道医生是怎么说的。我看不出你所做的与文档中的内容有什么相似之处……你是否试图在从2.7迁移到3.7的同时将单个服务应用拆分为2个服务应用?还显示正在工作的
.yaml
文件的之前的版本。在2.7版本中,我的根目录中只有所有的service.yaml文件。每一个都有一个不同的脚本行(在url://.*)告诉服务的入口点。(main.app和main.update)。然后我把所有的.yaml文件串在一个deploy语句中,一切都正常了。我可能会尝试按照您建议的方式修复所有问题,但现在我只是将所有问题都塞进了默认服务中,而且效果很好,但我只有一个服务。这没什么大不了的,因为我可以使用cron.yaml通过命名入口路由来运行更新服务。
entrypoint: gunicorn -b :$PORT main:app