在使用 capistrano 时,应在 crontab 中使用链接的 /current/ 目录,而不是 /app_revision/ 目录
作者: Startouf创建于 2017年6月10日更新于 2025年6月26日
请考虑以下情况:我在 capistrano 中有两个角色,`:worker` 和 `:scheduler`。 `:scheduler` 角色是用于将 crontab 更新为每次运行的机器。`:worker` 角色是用于处理后台任务。 事实证明,为了节省成本,我决定我的 `scheduler` 机器也可以作为 `worker` 来处理异步任务。现在有两种情况,第二种情况出现了问题: - 当我部署到 `:scheduler` 角色时,它将部署到启用了每次运行的机器上,并更新 crontab,一切都很好。 - 当我部署到 `:worker` 角色时,它仍然会部署到启用了每次运行的机器(因为同时也是一个 worker),但不会更新 crontab(因为 crontab 更新只与 `:scheduler` 有关)。现在发生的情况是: - 不仅会使用旧的应用程序版本,而且 - 在 `keep_releases` 部署后,crontab 所引用的文件将不再存在,导致调度程序发生无声崩溃(除非启用电子邮件警告来报告 cron 失败)。 为了解决这个问题,我建议 crontab 始终使用 capistrano 使用的 `/current` 符号链接来维护活动版本。你怎么看呢?
内容来源: javan/whenever