我目前正在学习如何使用Capistrano首次部署Rails应用。我看到capistrano / rails的默认流程包括在主机之前运行db:migrate"发布"新的符号链接。但是,在同时跨多个Web节点运行部署时,会出现一些时序问题。
在我看来,唯一合理的解决方案是尝试将默认流程返回到以下三个阶段:
我现在对自己的推理有点缺乏信心,因为虽然我搜索了文档并搜索了帖子,但我还没有真正看到有人在谈论这些多节点问题,即使我不得不认为它影响了几乎每个人......
答案 0 :(得分:0)
您不能在多个节点上运行rake db:migrate。您只在1个节点上运行它。请记住,db migrate迁移数据库,该数据库由应用程序中的所有节点共享,因此同时在不同节点上运行它绝对是个坏主意。
我从数据迁移中拆分数据库迁移以获得更快的部署,然后我执行两种不同的部署: 1)使用db迁移和整个应用程序的一些停机时间 2)没有数据库迁移,没有停机时间(旧dynos正在运行时新的dynos旋转,启动后路由器将新流量切换到新dynos,然后关闭旧dynos)
(当然我在Heroku的背景下做的是不同但基本相同的想法)
还要记住,在运行db:migrate之后,必须重新启动所有节点的Rails,因此您的管理脚本应该考虑到这一点。