【问题标题】:Deploy H2O Wave application to Heroku?将 H2O Wave 应用程序部署到 Heroku?
【发布时间】:2021-01-21 22:09:16
【问题描述】:

我对部署 python web 应用程序比较陌生,但我试图将我的 H2O wave 应用程序部署到 Heroku,但一直遇到问题,我在文档中找不到太多帮助。

如果我使用命令(在 SDK for wave 中)启动服务器,本地一切正常:

$ ./waved
2021/01/22 10:26:38 # 
2021/01/22 10:26:38 # ┌─────────────────────────┐
2021/01/22 10:26:38 # │  ┌    ┌ ┌──┐ ┌  ┌ ┌──┐  │ H2O Wave
2021/01/22 10:26:38 # │  │ ┌──┘ │──│ │  │ └┐    │ 0.11.0 20210118061246
2021/01/22 10:26:38 # │  └─┘    ┘  ┘ └──┘  └─┘  │ © 2020 H2O.ai, Inc.
2021/01/22 10:26:38 # └─────────────────────────┘
2021/01/22 10:26:38 # 
2021/01/22 10:26:38 # {"address":":10101","t":"listen","webroot":"/Users/kenjohnson/Documents/TTT/H2O Wave/wave/www"}
2021/01/22 10:26:39 # {"addr":"127.0.0.1:64065","route":"/tennis-pred","t":"ui_add"}
2021/01/22 10:46:04 # {"host":"http://127.0.0.1:8000","route":"/counter","t":"app_add"}

然后在项目的根目录下运行:

uvicorn tennis_pred_app:main

对于部署,除了 Wave python 文件之外,我只有一个 requirements.txt 和一个 Procfile

web: uvicorn tennis_pred_app:main --host 0.0.0.0 --port 10101

这就是我的 foo (tennis_pred_app.py) 的样子(简化):

from h2o_wave import Q, main, app, ui

@app("/tennis-pred")
async def serve(q: Q):
    show_form(q)
    await q.page.save()

我目前遇到的错误是:

2021-01-22T00:28:41.000000+00:00 app[api]: Build started by user x
2021-01-22T00:31:07.040695+00:00 heroku[web.1]: State changed from crashed to starting
2021-01-22T00:31:06.879674+00:00 app[api]: Deploy 1dc65130 by user x
2021-01-22T00:31:06.879674+00:00 app[api]: Release v23 created by user x
2021-01-22T00:31:26.580199+00:00 heroku[web.1]: Starting process with command `uvicorn tennis_pred_app:main --host 0.0.0.0 --port 20819`
2021-01-22T00:31:30.299421+00:00 app[web.1]: INFO:     Uvicorn running on http://0.0.0.0:20819 (Press CTRL+C to quit)
2021-01-22T00:31:30.299892+00:00 app[web.1]: INFO:     Started parent process [4]
2021-01-22T00:31:46.000000+00:00 app[api]: Build succeeded
2021-01-22T00:32:27.041954+00:00 heroku[web.1]: Error R10 (Boot timeout) -> Web process failed to bind to $PORT within 60 seconds of launch
2021-01-22T00:32:27.093099+00:00 heroku[web.1]: Stopping process with SIGKILL
2021-01-22T00:32:27.199933+00:00 heroku[web.1]: Process exited with status 137
2021-01-22T00:32:27.242769+00:00 heroku[web.1]: State changed from starting to crashed

【问题讨论】:

  • 这很奇怪。您的日志显示“Uvicorn 在0.0.0.0:33594 上运行”,我猜这是正确的端口,因为它每次都会更改,但它也表示您的应用未绑定到该端口。
  • 是的,这很奇怪,因为它在 localhost 上运行良好,而我唯一添加的是 Procfile
  • 请出示您的foo.py 好吗?
  • 你的Procfilefoo:main。你说你的foo.py 实际上是tennis_pred_app.py。您展示的代码 sn-p 只有一个功能:serve。你的Procfile实际上web: uvicorn tennis_pred_app:serve --host 0.0.0.0 --port $PORT吗?
  • 是的,我使用了tennis_pred_app 而不是 foo 并且我使用 main 而不是 serve 因为来自 H2O wave 网站的文档:h2oai.github.io/wave/docs/deployment 和 main 和 Q 都是我从 h2o_wave 库中导入的东西(再次编辑了上面的帖子)

标签: heroku h2o h2o.ai h2o-wave


【解决方案1】:

您无法在 Heroku 上选择您的端口。相反,Heroku assigns you a port via the PORT environment variable

将您的Procfile 更改为

web: uvicorn foo:main --host 0.0.0.0 --port 10101

web: uvicorn foo:main --host 0.0.0.0 --port $PORT

【讨论】:

  • 感谢您提供的信息,但是即使进行此更改后,我仍然遇到同样的错误,您还有什么想法吗? (我在上面添加了完整错误的图像)
  • 您仍然遇到启动超时,并显示您的进程未绑定到 $PORT 的错误?那个确切的错误信息?
  • 为什么需要监听一个端口?
  • 因为服务器就是这样工作的。他们监听(通常是一个)端口上的连接。
  • 另外一件事我忘了说,当我在本地运行时,我需要先通过在 Wave 的 SDK 包中执行 ./waved 命令来启动服务器,我是否需要将它包含在我的部署也是?
猜你喜欢
  • 2022-06-29
  • 2012-07-16
  • 2012-11-22
  • 2015-12-25
  • 2015-02-27
  • 2018-04-06
  • 2016-11-16
  • 2018-01-25
相关资源
最近更新 更多