有什么方法可以区分Heroku计划的dyno重新启动和新版本吗?

时间:2019-10-29 21:52:43

标签: heroku cloudflare

我的应用程序中有一些代码会在每次启动时清除缓存(使用Cloudflare的API),以便每当部署网站更改时,它就会立即显示给所有人,而不是无限期地将旧版本保留在Cloudflare的缓存中

Heroku每24小时重新启动我的测功机。这无缘无故地清除了Cloudflare,导致流量激增,并干扰了分析。

是否有一种方法可以在启动时检测到该应用程序是由于实际的Heroku部署还是仅由于其日常重启而重启?

我考虑过的一种方法是使用GitHub的公共API在启动时检查提交是否已在过去一小时内推送到主控中,但这似乎是一种hack,并且可能有更好的方法。

2 个答案:

答案 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变量更改,附加组件更改等。