我在nginx下运行着由三个mongrels组成的集群,我使用Capistrano 2.4.3部署了该应用程序。当我在运行系统的情况下“上限部署”时,其行为是:
mongrel_rails集群::重新启动-C
/var/www/rails/myapp/current/config/mongrel_cluster.yml“
似乎'mongrel_rails cluster::restart'没有正确地等待句号
在尝试重新启动集群之前。我如何诊断和解决此问题?
编辑:这是答案:
在“重新启动”任务中,mongrel_cluster只需执行以下操作:
def run
stop
start
end
在调用“开始”之前,它不会等待或检查进程是否已退出。这是a known bug with an outstanding patch submitted。我将补丁应用到Mongrel Cluster,问题消失了。
最佳答案
您可以通过在Capistrano配方中添加以下内容,明确地告诉mongrel_cluster配方在开始之前删除pid文件:
# helps keep mongrel pid files clean
set :mongrel_clean, true
这使它将--clean选项传递给mongrel_cluster_ctl。
我回过头看了看我的一项部署配方,发现我还改变了重启任务的工作方式。查看“杂种用户”组中的以下消息:
mongrel users discussion of restart
以下是我的deploy:restart任务。我承认这有点骇人听闻。
namespace :deploy do
desc "Restart the Mongrel processes on the app server."
task :restart, :roles => :app do
mongrel.cluster.stop
sleep 2.5
mongrel.cluster.start
end
end