如何使用 sanic 框架和 python 3.5+ 为 appengine 配置 app.yaml 文件

如何使用 sanic 框架和 python 3.5+ 为 appengine 配置 app.yaml 文件

我是 GCP 的新手,我们选择了 sanic 框架来使事情运行得更顺畅。 萨尼奇支持 python 3.5+,因此我们将在 appengine 上使用灵活的环境。

目前我正在尝试部署“Sanic”你好,世界(入门)应用程序到appengine。并卡住配置问题

# This looks like a Python app.  If so, please enter the command to run 
the app in production (enter nothing if it's not a python app): :

我研究了 GitHub 上提供的其他 Google Cloud Platform(Python 文档示例)示例,它们都使用gunicorn但是 sanic 有内置的 http 服务器。

有人可以为 appengine 上的 sanic 建议 app.yaml 模型吗?我当前的设置如下

1. app.yaml

    runtime: python
env: flex
threadsafe: true

runtime_config:
  python_version: 3

handlers:
- url: .*  # This regex directs all routes to main.app
  script: main.app

2.main.py

#import logging
from sanic import Sanic
from sanic.response import json

app = Sanic()

@app.route("/")
async def test(request):
    return json({"hello": "world"})

if __name__ == "__main__":
    app.run(host="0.0.0.0", port=8000)

3. 要求.txt

httptools
sanic
ujson
uvloop

更新。

添加entrypoint: python main.py应用程序.yaml修复了我的部署问题,但是 appengine 出现错误。

错误:服务器错误
服务器遇到临时错误,无法完成您的请求。请在 30 秒后重试。

提前致谢。如果您不能解决我的问题,请不要投反对票。

答案1

确切地说,这是 appengine应用程序.yaml入口点模型:

entrypoint: gunicorn <main:app> --bind 0.0.0.0:8080 --worker-class sanic.worker.GunicornWorker

您需要确保安装 gunicorn pip 包。目前 Appengine 支持 gunicorn 版本 19.7.1。

答案2

我不确定以下内容是否有帮助。

我也遇到了同样的问题。解决方法:

  1. 添加entrypoint: gunicorn -b :$PORT main:app到我的app.yaml文件。
  2. 添加"gunicorn==19.7.1"到我的requirements.txt文件。

答案3

只需将主要内容更改为如下形式:

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=os.environ.get('PORT',8080))

并将 app.yaml 入口点设置为:

entrypoint: python main.py

它应该可以工作。

更新

对我来说,它是有效的。我只需更改上面写的内容,然后将新版本部署到 GAE-Flex。

相关内容