我有一个大型站点反复无法启动。这是一个双容器安装,因此在引导迁移期间,旧容器继续运行。我最终通过为引导过程设置 SKIP_POST_DEPLOYMENT_MIGRATIONS=1,然后在新容器启动后运行迁移来解决这个问题。在 ENV 部分设置 SKIP_POST_DEPLOYMENT_MIGRATIONS=1 后,迁移非常快,站点随后能够正常运行(尽管可能稍慢一些),而迁移过程耗时超过 20 分钟,我记得是这样。
我认为(但尚未测试),使用同样的技巧也可以最小化单容器安装期间的停机时间。如果我的推测正确,你可以这样做:
- 在
app.yml中添加SKIP_POST_DEPLOYMENT_MIGRATIONS=1 - 运行
./launcher rebuild app - 运行
./launcher enter app - 运行
SKIP_POST_DEPLOYMENT_MIGRATIONS=0 rake db:migrate - 撤销
app.yml中的修改,除非你打算在每次升级后记得手动执行迁移 - 也许再次重建,以确保在你还记得可能导致站点问题的原因时(比如四个月后你再次尝试时,你可能完全想不起来,别人也很难猜测问题出在哪里)不会出现任何问题
如果有一种方法能让 ./launcher 在不修改 app.yml 的情况下传递 SKIP_POST_DEPLOYMENT_MIGRATIONS=1,那对于不擅长编辑配置文件的用户来说会方便很多。
如果我确实完成了这项工作,我会创建一个新主题来报告我的发现。不过,由于烟雾弥漫,我被困在一个没有大显示器的房间里。(疫情还不够吗?我们还得忍受烟雾?而且我离那场大火其实并不近。)