我是 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
我不确定以下内容是否有帮助。
我也遇到了同样的问题。解决方法:
- 添加
entrypoint: gunicorn -b :$PORT main:app
到我的app.yaml
文件。 - 添加
"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。