Ruby on rails Nginx使用capistrano滚动重启Rails应用程序
就我的一生而言,我不知道如何使它正常工作 该问题与其他问题类似,例如: 然而,我们使用的是Nginx/Passenger,而不是Mongrel 问题是,在部署中,如果我们使用以下标准:重新启动任务:Ruby on rails Nginx使用capistrano滚动重启Rails应用程序,ruby-on-rails,deployment,nginx,passenger,capistrano,Ruby On Rails,Deployment,Nginx,Passenger,Capistrano,就我的一生而言,我不知道如何使它正常工作 该问题与其他问题类似,例如: 然而,我们使用的是Nginx/Passenger,而不是Mongrel 问题是,在部署中,如果我们使用以下标准:重新启动任务: task :restart, :roles => [:app], :except => {:no_release => true} do run "cd #{deploy_to}/current && touch tmp/restart.txt" end 它在
task :restart, :roles => [:app], :except => {:no_release => true} do
run "cd #{deploy_to}/current && touch tmp/restart.txt"
end
它在每个web服务器上都会涉及restart.txt文件,但任何当前为请求提供服务的实例都需要在生成新实例之前完成。这会造成严重的延迟,并导致我们的应用程序在一切恢复正常时最多2分钟不可用
为了避开这一问题,计划如下:
run "cd #{deploy_to}/current && echo 'ok' > public/lb.txt", :host => s.host
实际上应该是:
run "cd #{deploy_to}/current && echo 'ok' > public/lb.txt", :hosts => s.host
我遇到了这个gemcapify-ec2,它具有滚动重启功能 我即将安装并试用它 以下是自述文件中的描述,描述了滚动重启功能的功能: “此功能允许您将代码一次部署到一个实例,而不是同时部署到一个实例。这对于部署后可能需要较长时间启动的更复杂的应用程序非常有用。Capistrano将执行完全部署(包括任何自定义挂钩)对于单个实例,可以选择对该实例执行HTTP healthcheck,如果部署成功,则继续下一个实例
部署后,将显示一个状态报告,指示部署成功、失败或未开始的实例。如果出现某些故障,可能需要手动采取进一步的操作;例如,如果从ELB中删除实例(请参阅下面的“使用弹性负载平衡器”部分)如果部署失败,出于安全原因,实例将不会使用ELB重新注册。”我发现了一些额外的东西,可能有用,也可能没用……如果循环中没有“run”行,那么每个任务只执行一次,这意味着它在循环中做了我想要的事情。但是,添加“run”行后,角色中的每个服务器都会重复一次,因此返回到6次,而不是1次。
run "cd #{deploy_to}/current && echo 'ok' > public/lb.txt", :hosts => s.host