如何滚动重启一群mongrels

时间:2008-09-23 22:13:17

标签: ruby-on-rails deployment capistrano mongrel

任何人都知道通过capistrano以“滚动”方式重新启动杂种群集的好方法,例如,一次只有一个杂种。很高兴在每个地方都有一些等待时间,让杂物也加载rails应用程序。

我已经做了一些搜索,并没有找到太多,所以在我自己潜入mongrel_cluster gem之前寻求帮助。

谢谢!

3 个答案:

答案 0 :(得分:3)

我同意跷跷板方法而不是你正在寻求的滚动方法。问题是,在转换过程中,负载平衡可能会在不同版本的应用程序之间来回传递用户。

我们提出的解决方案(在找到SeeSaw之前,我们不使用)是从负载均衡器中取出一半的杂物。关闭它们。更新它们。启动它们。将这些mongrels重新上线到负载均衡器中并取消另一半。关闭下半场。更新下半场。启动它们。这大大减少了同时运行两个不同版本的应用程序的时间。 我写了一个Windows bat文件来做到这一点。 (建议不要在Windows上部署,顺便说一句)

非常重要的是要注意,进行数据库迁移会使整个方法变得有点危险。如果只有附加迁移,则可以在部署之前随时运行这些迁移。如果要删除列,则需要在部署后执行此操作。如果要重命名列,最好将其拆分为创建新列并将数据复制到迁移中以在部署之前运行,并使用单独的脚本在部署后删除旧列。实际上,如果您没有特别努力组织它们,那么在生产数据库中使用常规迁移可能会很危险。所有这些都指向更频繁的交付,因此每次更新都是风险较低且不太复杂,但这是另一个响应的主题。

答案 1 :(得分:1)

Seesaw是Rails Oceania Rubyforge Project中发现的一种宝石,它为杂种群提供了这种功能。然而,自2007年以来,这个项目可能会受到一些有点腐烂的影响而不是havain。仍然值得一看,甚至只是为了捏这些想法:)

答案 2 :(得分:1)

#!/bin/bash
for PIDFILE in /tmp/mongrel.*; do
  PID=$(cat ${PIDFILE})
  kill ${PID}
  ${RUN_MONGREL_CMD} ${PID}
  sleep 2
done