部署更新后不用重启服务,对热部署没有需求,但是对 php 那种更新上去瞬间就能看到效果有很大的需求。 对于我这种急性子,最喜欢在服务器线上调试,一边 git push 到服务器,一边刷新浏览器。(个人站) 我试过 sinatra,重启服务大约需要 3 秒,对我来说 3 秒的等待还是太漫长了,可能是 passenger 重启耗费的时间多,sinatra 本身应该是很轻量级的。
Passenger 可以使用:
touch ./tmp/restart.txt
这种方式的机制是: Once Passenger has noticed that the file's timestamp has changed, it will restart the application.
erlang 那种 umount 旧的 保持的老会话在旧实现里,同时 mount 新的处理新的会话才能算热部署吧?
php 生产环境依赖 php 的那种"热部署"简直在拷问自己的 RP,不仅修改多个物理文件之间不能保障原子性更新,同时也无法保障 opcode cache 会同步更新 (看重性能的生产环境下启用各种 opcode cache 都是鼓励 never 刷新,或者根据 ttl/访问计数刷新), 依赖语言特性的那种"热部署"每次修改前都得去烧柱香。