有什么方法可以区分 Heroku 的预定 dyno 重启和新构建?

Any way to distinguish between Heroku's scheduled dyno restarts and a new build?

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

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

有没有办法在启动时检测到此应用程序重启是由于实际的 Heroku 部署而发生的,还是仅仅由于它们的每日重启而发生的?

我考虑过的一种方法是使用 GitHub 的 public API 来检查启动时是否在最后一个小时内将提交推送到 master,但这似乎就像黑客一样,可能有更好的方法。

这是 release phase task(大胆的矿井)的经典用例:

Release phase enables you to run certain tasks before a new release of your app is deployed. Release phase can be useful for tasks such as:

  • Sending CSS, JS, and other assets from your app’s slug to a CDN or S3 bucket
  • Priming or invalidating cache stores
  • Running database schema migrations

If a release phase task fails, the new release is not deployed, leaving your current release unaffected.

将您的“清除缓存”逻辑移动到单独的脚本并将其添加到您的 Procfile,例如:

web: python some_main_command.py
release: python clear_cache.py

我让我的应用程序(通过环境变量)访问我自己的 Heroku API。这允许它查询 API,询问它自己的最新版本是什么时候。如果最新版本是在超过 24 小时之前发布的,我们不会清除 Cloudflare。代码在这里 https://github.com/ImpactDevelopment/ImpactServer/commit/db1cced1ed298b933cee87457eaa844f60974f60#diff-12a774f9437b88d4b4ebbd4e2ab726abR25

这会检测导致应用重新发布的任何情况,包括代码更改、环境变量更改、附加组件更改等。