这几天要部署自己做的一个小板凳,是用 sinatra 写的一个简单的 blog 程序。这个程序很简单,代码非常少,可以像 php 那样直接使用 async 将代码。但我想熟悉下 Ruby 关于部署方面的技术,因此找到了 Capistrano 这个东西。Rails 的 web 后台对环境非常挑剔,Capistrano 是 Ruby 写的, 虽然它可以部署各种语言的代码,但可以部署 Rails 的程序不会太简单。

Capistrano 这个东西产生的一大堆配置文件有点让人迷糊。Capfile 相当于一个 makefile 文件,里面设置了一些任务是如何运行的。config目录下有三个配置文件,其中 deploy 子目录是用于配置部署不同的环境。默认的是 production 和 staging 环境配置项分别对应两个同名的文件。deploy.rb 这个文件相当于一个总配置文件,里面的是一些公共的配置项。
Capistrano 非常依赖版本控制,在 deploy.rb 文件中 repo_url 是用于设置代码仓库的地址的,配置好这个参数后需要确认服务器有访问代码仓库的权限。 scm 是设置具体的版本控制软件的。Capistrano 支持最好的是 git 和 svn。 deploy_to 是一个非常重要的参数,它指示了代码上传到服务器的具体位置,另外需要确保这个目录与配置好的用户名有足够的访问权限。这几个参数设置好后,其他的参数可以使用默认的了。然后再配置对应环境的具体配置项。 在环境配置项中,role 参数指示的三项分别是 app,web 和 db。这个三项分开的好处是可以让他们部署到不同的服务器上做负载均衡。单台服务器不用太关心,三项指向同一个地址即可。然后配置服务器的访问权限,配置非常简单,设置好用户名和 ssh public key就可以了。到这里基本的配置已经完成了,运行cap deploy:check 可以检测配置是否成功。这个时候如果 check 成功的话使用 cap deploy 命令就可以成功上传代码了。

Click here to see the full blog post