我的应用程序中有一些代码会在每次启动时清除缓存(使用Cloudflare的API),以便每当部署网站更改时,它就会立即显示给所有人,而不是无限期地将旧版本保留在Cloudflare的缓存中
Heroku每24小时重新启动我的测功机。这无缘无故地清除了Cloudflare,导致流量激增,并干扰了分析。
是否有一种方法可以在启动时检测到该应用程序是由于实际的Heroku部署还是仅由于其日常重启而重启?
我考虑过的一种方法是使用GitHub的公共API在启动时检查提交是否已在过去一小时内推送到主控中,但这似乎是一种hack,并且可能有更好的方法。
答案 0 :(得分:0)
这是release phase task(粗体)的经典用例:
发布阶段使您可以在部署新的release应用之前运行某些任务。发布阶段对于以下任务可能很有用:
- 将来自应用程序的CSS,JS和其他资产发送到CDN或S3存储桶
- 设置或无效缓存存储
- 运行数据库架构迁移
如果发布阶段任务失败,则不部署新版本,而当前版本不受影响。
将“清除缓存”逻辑移到单独的脚本中,然后将其添加到Procfile
中,例如:
web: python some_main_command.py
release: python clear_cache.py
答案 1 :(得分:0)
我(通过环境变量)为我的应用程序访问了自己的Heroku API。这样,它就可以查询API,询问其最新发布时间。如果最新版本是24小时前发布的,那么我们不会清除Cloudflare。代码在这里https://github.com/ImpactDevelopment/ImpactServer/commit/db1cced1ed298b933cee87457eaa844f60974f60#diff-12a774f9437b88d4b4ebbd4e2ab726abR25
这会检测到导致应用程序重新发布的所有内容,包括代码更改,env变量更改,附加组件更改等。