我有一个在 nginx 下运行的由三个杂种组成的集群,我使用 Capistrano 2.4.3 部署应用程序。当我在有一个正在运行的系统时“限制部署”时,行为是:
- 应用程序已部署。代码更新成功。
在 cap deploy 输出中,有这样的:
- 执行“sudo -p 'sudo 密码:' mongrel_rails cluster::restart -C /var/www/rails/myapp/current/config/mongrel_cluster.yml”
- 服务器:[“myip”]
- [myip] 执行命令
- ** [out :: myip] 停止端口 9096
- ** [out :: myip] 停止端口 9097
- ** [out :: myip] 停止端口 9098
- ** [out :: myip] 已经启动了 9096 端口
- ** [out :: myip] 已经启动了 9097 端口
- ** [out :: myip] 已经启动了 9098 端口
- 我立即在服务器上检查,发现 Mongrel 仍在运行,并且前三个实例的 PID 文件仍然存在。
- 不久之后(不到一分钟),我发现 Mongrel 不再运行,PID 文件不见了,并且无法重新启动。
- 如果我手动在服务器上启动 mongrel,应用程序启动得很好。
似乎“mongrel_rails cluster::restart”在尝试重新启动集群之前没有正确等待完全停止。如何诊断和解决此问题?
编辑:这是答案:
mongrel_cluster,在“重启”任务中,简单地这样做:
def run
stop
start
end
在调用“开始”之前,它不会进行任何等待或检查以查看进程是否退出。这是一个已知的错误,提交了一个未完成的补丁。我将补丁应用到 Mongrel Cluster,问题就消失了。