使用 Gunicorn 部署在 Heroku 上时,Flask Web 应用程序行为不正确

问题描述 投票:0回答:1

我最近第一次在 Heroku 上部署了 Flask Web 应用程序。当使用 app.py 在本地运行以及在 Heroku 上使用内置 Flask 服务器时,该应用程序可以正常工作。

但是,我在使用 Gunicorn 时遇到了应用程序部署版本的问题。当我尝试执行某些操作(例如登录)时,就会出现问题。应用程序有时会重新加载页面而不进行任何重定向,而不是重定向到预期页面(例如仪表板)。此问题间歇性发生,大约四分之一的尝试导致正确的重定向。

此外,即使我设法访问仪表板,菜单按钮有时也会将我重定向回索引页面,而不是预期的目的地。这种行为也是不一致的,并不是每次都会发生。

我已经检查了 Heroku 日志 (heroku log --tail),但没有发现任何可以解释该行为的错误或警告。

这是我的 Procfile 配置:

web: gunicorn -w 4 -b 0.0.0.0:$PORT app:app

任何有关如何诊断和解决此问题的建议将不胜感激。

python python-3.x flask heroku gunicorn
1个回答
0
投票

此问题间歇性发生,大约四分之一的尝试会导致正确的重定向。

您正在运行四个工作人员(通过

-w 4
参数
gunicorn
),其中任何一个都可以处理任何请求。

如果您在大约四分之一的尝试中看到预期的行为,则很可能您所做的事情在同一个工作人员处理下一个请求时有效,而如果另一个工作人员这样做则失败。如果您没有在本地计算机上运行多个工作程序(这很常见),这可能会在您的本地计算机上正常工作。

既然您提到了登录,这可能就是您进行会话的方式。这是在内存中完成的吗?通过全局变量? 这将无法正常工作。如果您使用本地文件系统,这也不是一个好主意。它可能在同一个测功机上的工作人员之间工作(尽管也可能不会,我不确定),但它肯定不会在多个测功机上工作。

正确的解决方案是修复全局存储的所有内容。如果这是您的

SESSION_TYPE
,您可以使用另一个后端。网络连接的东西,比如 SQLAlchemy 或 Redis 后端,将是一个不错的选择。

我不建议以牺牲性能为代价简单地隐藏问题的非解决方案是只运行一个工作进程而不是四个。

© www.soinside.com 2019 - 2024. All rights reserved.