我们可以把一个运行的rails环境,根据处置的方式,拆分成以下几个部分:
- 系统环境:跑rails必须的服务器系统环境,比如特定版本的ruby,各种第三方库,第三方工具等。
- 项目配置:和当前运行环境相关的变量,比如数据库帐号,各种第三方API和服务的连接方式。
- 项目代码:除去和运行环境相关的rails应用代码。
- 应用数据:比如数据库,本地一些需要持久化的文件等。
拆分的原因是因为以上几个部分有不同的特性,在构建,备份,恢复的过程中需要用不同的方式来对待。 特性包括是否经常发生变化,变化的频率,是否和运行环境相关等。
首先看构建过程。构建过程往往非常繁琐,需要能够自动化进行。拆分成以上几个部分后,构建方案如下:
- 用chef构建系统环境。
- 用cap把项目配置和项目代码构建出应用的执行环境。
- 用backup Gem备份和恢复应用数据。
发布新版本,因为只改动了项目代码,只需要重新用cap重新构建执行环境。 需要增加配置,或者修改应用数据,也不复杂,执行一些特定脚本即可。
系统恢复:可以重头构建,但是时间消耗太长,更好的方案是针对服务器做镜像,也可以用docker做应用级别的镜像。 另外也需要备份好项目配置,以及隔离和备份出来应用数据。 出现问题的时候从镜像创建环境,修改配置,恢复备份的应用数据,然后发布最新的代码。