Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google app engine Google应用程序引擎Python 3.7中的多种服务_Google App Engine_Python 3.7_App.yaml - Fatal编程技术网

Google app engine Google应用程序引擎Python 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。这不再允许(只允许自动)。请注

我有一个应用程序在Python 2.7标准框架下运行良好,在3.7框架下作为两个独立的应用程序运行良好,但我不知道如何将它们配置为具有两个服务的单个应用程序。
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
    文件,该文件定义了名为
    update
    的WSGI兼容应用程序(如果该应用程序名为
    app
    ,则您将使用
    main:app
  • 在一个示例中,您使用了
    b
    而不是
    -b
您没有在
app/app.yaml
文件中定义入口点。您的
default
服务很可能满足自动添加默认入口点的条件,请参阅:

  • 应用程序目录的根目录包含一个名为
    app
    的WSGI兼容对象的
    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