部署 Passenger 怎么做到无缝更新部署?

qhwa · 2013年01月24日 · 最后由 WilliamZhu 回复于 2013年02月03日 · 3903 次阅读

passenger 的重启很方便,touch tmp/restart.txt 可是之后首次访问就会有很长的启动时间

查了一下文档,只有企业版有rolling restart功能……这是要让人抓狂么,难道每次更新都放到夜深人静的时候?

大家有什么法子吗? passenger_pool_idle_time 能解决吗?

passenger_pool_idle_time 是多长时间没人访问就停进程 passenger_min_instances 这个估计有点用,但是实际感觉不明显。 我们的设置是

passenger_max_pool_size 30;
 passenger_pool_idle_time 90;
 passenger_min_instances 16;
 passenger_max_requests 500;

release 玩了后一阵 curl 让他起来,是不是感觉很山寨。。。。

企业版很贵么?

#2 楼 @Rei 大公司里面,走一次采购流程死一层脑细胞,填很多表格,做 3 种同类供应商比较

#1 楼 @ywencn 一会找台服务器试试,谢谢~~

#3 楼 @qhwa 三方比价这不知道是从哪个脑子里想出来挪到 IT 企业的。当年听一搞运维兄弟吐槽,买 Windows 去找谁来比。

每次 touch tmp/restart.txt 之后,Passenger 会在下一次接到请求的时候重启 instance。这也是 touch 后第一次比较慢的原因。 这个问题没有很好的解决办法,不过有些方案可以给你参考下:

  1. 你可以 touch 后自己手动把页面刷新一次,配合 min_instance 就不会有问题了。idle_time 是多长时间后没人访问就把多余的 instance 干掉的,但一共保留的 instance 数量不会少于 min_instance。

  2. 设置 passenger_pre_start 选项。原理就是 Passenger 会在 web 服务器(我当时用的 Nginx)重启后,自动发一个请求给 server。效果跟你重启后手动刷一次是一样的。不过这个自动发请求是在 web 服务器重启后才会生效的,等同于你每次要重启 web 服务器。。。真不知道他们怎么脑残的想出这个配置的。。。资料如下 http://www.modrails.com/documentation/Users%20guide%20Nginx.html#PassengerPreStart

总的来说,还是 touch 后自己刷新一下比较靠谱。一般重启都是有什么新功能添加上去或者打了啥补丁的,刷新一下顺便也可以看看网站是不是被新代码整挂了~

当然你如果单纯的想自动化的话,可以写个小脚本,touch 后用 curl 啥的去访问下你的网站域名。用 capistrano 的话就可以直接写在 deploy 文件里

我一直以为 touch 的话就是 rolling restart。囧了...

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册