由于活动实例,GAE 应用程序未显示更新的数据/见解

Posted

技术标签:

【中文标题】由于活动实例,GAE 应用程序未显示更新的数据/见解【英文标题】:GAE application not showing updated data/insights due to an active instance 【发布时间】:2021-01-27 23:13:07 【问题描述】:

我有一个 GAE 应用程序从 GCS 存储桶读取数据(每天更新!)。

问题:此应用在启动之前已初始化的实例(当前活动的实例)时显示对旧数据​​的见解

问题:如何确保在 GCS 存储桶中更新数据时,GAE 应用会读取更新后的数据?也许通过初始化应用程序的新实例或任何其他替代方案

应用信息: 运行时:标准 python 3.7, 缩放:自动

【问题讨论】:

您所说的“实例已经在前面初始化”是什么意思?您的 GAE 应用程序如何处理 GCS 中的数据?什么时候从 GCS 读取数据? 实例已经初始化:当前活动实例,数据在GCS中的作用:用于获取相关见解/可视化,从GCS读取数据:实例启动时(收到加载请求时)。此数据读取被初始化为全局变量 【参考方案1】:

因此,本质上,您需要一种方法来在每次 GCS 更新结束时有意终止您的 GAE 应用程序的所有现有实例。我认为没有办法做到这一点,至少不能以编程方式(您可以从此 GCP 控制台页面 https://console.cloud.google.com/appengine/instances 手动删除实例)。

您可以通过重新部署您的应用来做到这一点。 CI/CD 服务能够以编程方式部署到 GAE,因此您可以让一些日常 cron 作业触发部署。

但是,正确的做法是使用某种持久性存储(例如 Google Datastore),而不是实例上的全局变量。然后,您可以每天运行和下载 GCS 文件并更新数据存储中的数据的 cron 作业。然后,您的应用程序的所有实例都将从数据存储区而不是全局变量中读取并获取更新。

【讨论】:

我意识到 Google Firestore 或 Datastore 最终是可行的方法。目前,我发现了一个类似的用例和一种使用 App Engine Admin API 以编程方式删除实例的方法,如下所述:***.com/questions/55203095/…

以上是关于由于活动实例,GAE 应用程序未显示更新的数据/见解的主要内容,如果未能解决你的问题,请参考以下文章

ProgressDialog 未显示在活动中

从 android 推送通知单击启动时,意图数据未在活动中更新

第一次通知活动显示时,第二次通知中未显示GCM通知活动

未找到 GAE Web 表单图像(使用 Python 和 jinja2)

天朝使用GAE入门指南

(GAE 和 django) 模板过滤和时间格式显示