【问题标题】:Why my Flask backend is unstable on Heroku? [duplicate]为什么我的 Flask 后端在 Heroku 上不稳定? [复制]
【发布时间】:2020-10-01 08:37:46
【问题描述】:

我为游戏创建了一个小型后端 API。当用户创建游戏(对 API 的请求完成)时,Python 会创建该游戏的一个新实例(更准确地说,我在 dict 中添加了一个游戏)。用户在响应中获取了游戏 id,现在可以玩了(前端调用了几个路由来更新这个游戏的状态)。

它在本地完美运行,但在 Heroku 上非常不稳定:我使用轮询,大约 50% 的请求失败,因为找不到游戏 ID。

我不明白为什么后端有时能找到游戏,有时却找不到。

有人知道出了什么问题吗?

非常感谢。

【问题讨论】:

  • 你没有真正提供足够的细节来查看这个。
  • 你能把你Procfile的内容提供给Heroku吗?

标签: flask heroku


【解决方案1】:

这听起来可能是由于您实现内存存储的方式。如果它不是线程安全的,则该应用程序可能在开发中完全运行,但是当使用像 gunicorn 这样的 WSGI 服务器和多个工作进程/线程进行部署时,每个工作进程/线程都有自己的内存,它可能会导致你所描述的奇怪行为。

此外,Heroku 很古怪。

这是通过pip 安装在任何旧系统上时gunicorn --help 的输出,如果未提供-w 标志,则默认为1 个工作人员:

-w INT, --workers INT
The number of worker processes for handling requests. [1]

但是,当通过 Heroku 控制台执行时,请注意它默认为 2:

-w INT, --workers INT
The number of worker processes for handling requests. [2]

Heroku 似乎出于某种原因定制了他们的 gunicorn 构建(编辑:figured out how),因此以下 Procfile 启动时有 2 个工作人员:

web: gunicorn some:app

在非 Heroku 系统上,这将由单个工作人员启动。

您可能会发现以下Procfile 可以解决您的问题:

web: gunicorn --workers 1 some:app

当然,如果它是一个不需要扩展到多个工人的小型项目,这很合适。为了缓解此问题并扩展应用程序,您可能需要调查更改代码以在您的应用程序中实现单独的存储后端(例如 Redis)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-13
    • 2016-03-08
    • 2013-02-25
    • 1970-01-01
    • 2014-11-24
    • 1970-01-01
    • 2013-12-08
    • 2020-05-30
    相关资源
    最近更新 更多