【发布时间】:2016-12-13 11:54:43
【问题描述】:
我在 heroku 的 gunicorn 上运行 python3/flask 应用程序。此应用程序向用户显示从 API 调用中提取的项目列表,供用户接受或拒绝。根据用户是点击与每个项目关联的接受链接还是拒绝链接,应用程序会将项目附加到已接受项目的内部列表中,或者是被拒绝项目之一。
目前,我将每个列表(建议、接受和拒绝)存储为应用程序中的 pandas 数据框对象。
即我用一个空的数据框初始化我的应用程序:
app = Flask(__name__)
app.accepted = pd.DataFrame()
app.suggested = pd.DataFrame()
使用 API 调用填充建议数据框:
@app.route("/get_suggestions")
def get_suggestions():
app.suggested = <some data returned from an API>
然后在点击“接受”链接后将建议的项目附加到接受的数据框中:
@app.route("/accept/<suggest_id>")
def accept_item(suggest_id):
app.accepted(len(app.accepted)) = app.suggested.loc[int(suggest_id)]
这一切都可以在我的本地 miniconda 虚拟环境(运行“heroku 本地网络”)上的 gunicorn 上正常运行,但是当部署在 heroku 上时,我不断收到“内部服务器错误”。当我查看日志时,看起来应用程序的内部变量(例如 app.suggested)没有被保留,因此当 accept_item 运行时,app.suggested 始终为空。为什么它们会保留在本地版本而不是 heroku 部署?
保持这种状态的最简单方法是什么?我希望少数多个用户能够使用该应用程序并每个人都建立自己的临时列表。我需要使用 SQLite 来保存状态吗?我是否需要将 cookie 放入用户的浏览器中,以便区分不同的用户?我不想要求用户在我的网站上创建帐户。
【问题讨论】:
标签: python-3.x heroku flask gunicorn