[英]Google App Engine Python: Error in yaml config file when deploying
我正在使用 Google App Engine,Python37 环境。 我今天尝试部署微服务时收到一条错误消息:
我运行命令:
gcloud app deploy app.yaml
得到错误:
...
File upload done.
ERROR: (gcloud.app.deploy) INVALID_ARGUMENT: script field for handler '/.*'
must be set to 'auto' for runtime python37.
PS C:\path_to_app> gcloud app deploy app.yaml
...
我的 app.yaml 是:
service: service_name
runtime: python37
handlers:
- url: /.*
script: main.py
和我最近部署的其他微服务看起来完全一样,只是服务名称不同。
我试图重新部署一个已经在运行的服务并收到相同的错误消息。
所以我仔细检查了 app.yaml 参考文档: https : //cloud.google.com/appengine/docs/standard/python3/config/appref
但是我无法找出问题所在,也找不到为什么以前工作过的同一个 yaml 文件不再工作了。
有谁知道最近几天 Google App Engine 上可能出了什么问题,或者可能会发生什么变化?
提前致谢。
根据 Python 3.7 的AppEngine 文档,
脚本元素唯一接受的值是auto
以下是文档中的示例条目:
handlers:
- url: /images
static_dir: static/images
- url: /.*
secure: always
redirect_http_response_code: 301
script: auto
@Omair的早期答案虽然正确,但只是故事的一部分。 OP 的原始问题利用了 App Engine 第一代(“Gen1”)运行时应用程序的app.yaml
配置文件,其中发生路由,需要handlers:
的script:
指令handlers:
虽然这是一个完全有效app.yaml
的第一代( go111
, python
[2.5], python27
, php55
)的应用程序,它会为下一代(“第二代”)不工作的应用程序。
注意: Python 2 仅受 App Engine Gen1 支持,而 Python 3 仅受 App Engine Gen2(Standard 或 Flex)支持,因此如果您从 Python 2 迁移到 3,您也会从 Gen1 移植到 Gen2,并且需要保持还要记住这些差异。 (不幸的是,这意味着从
webapp2
迁移到处理路由的 web 框架,即 Django、Flask 等)
App Engine Gen2要求路由由您的框架完成。 因此,所有 Gen1 app.yaml
文件都需要更新。 handlers:
使用handlers:
因为您的路由必须被删除或更改为auto
(因为它现在由您的 Web 框架完成)。 如果您有特定的应用程序启动说明,您可以提供一个entrypoint:
指令; 看看这些例子。
handlers:
和entrypoint:
都是可选的。 如果所有脚本处理程序都是auto
,则不需要handlers:
除非您的应用程序提供静态文件,如客户端 JS、CSS、HTML、图像等,并且entrypoint:
是可选的,因为如果您不指定服务器,默认情况下会选择(并启动) gunicorn
。 基本上,如果您采用所有默认值并且不提供静态文件,您可以将app.yaml
减少到 1 行,就像这样。 该示例来自我正致力于帮助开发人员将 Python 2 App Engine 应用程序升级到 Python 3 的存储库,他们需要比官方迁移指南中提供的更多帮助。
部署具有蓝图结构的 Flask 应用程序时出现此错误。 解决方案是将main.py
文件与app.yaml
文件放在同一目录中。 在main.py
文件中,导入 app 对象,例如from app import app
(这里的第一个“app”是包含init文件的文件夹,在其中创建了main.py
应用程序实例)。 执行此操作后,将脚本设置为自动应该可以正常工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.