想要实现PHP代码的自动部署 ,于是发现了
Capistrano,一个可以通过SSH登录不同的服务器完成文件的上传以及命令的执行。在我看来,Capistrano的主要优点是:
1. 多主机同时部署
还可以根据DB,Web和App服务器的角色不同,执行不同的操作。
2. 通过SSH在主机上执行命令
比如修改目录权限和创建数据库什么的,可以通过SSH自动完成还真方便。
3. 支持回滚(Rollback)
如果发现发布的版本有问题,可以直接回滚到前一个版本。服务器上保存了每次发布的版本,可以简单的通过符号链接(Symlink)进行切换,保证了事务操作。
不仅如此,还可以配置Apache服务器,包括重启
FastCGI(原来Web和App服务器是可以分开在不同的服务器上的,这才第一次了解)。再仔细看,Capistrano原来是基于
Rake实现的,一个完全基于ruby的构建工具,类似make和ant。但是跟后两者不同的是,rake的构建脚本完全是基于ruby语法的,用
Martin Fowler的话来说就是Internal DSL。ruby灵活的语法,让这一切成为可能,虽然感觉有点别扭。但是,总比重新发明一个语言,还要专门写一个解释器要好很多。
Capistrano的安装很简单,只要在命令行里输入
"
gem install capistrano",就搞定了。这又让我对RubyGems产生了兴趣,它是如何做到这一点的呢?结果,你猜怎么样,Gem也是用rakefile来描述的!
脚本语言的强大之处,就是其灵活性。以前在C++,Java和C#里需要用配置文件来完成的工作,在ruby等脚本语言里根本没有必要,直接修改代码就可以了。因为配置文件的出现,就是为了避免重新编译,而脚本语言恰恰就不用编译!所以,经常看到从Java转向PHP的程序员,在php上实现java烦琐的机制,完全失去了脚本语言的灵活性!