icon Capistrano 入门

第6章 deploy:update

这章将在目标主机上配置源代码。

在本地主机执行 deploy:update 任务(省略一部分显示)

% cap deploy:update
 * executing `deploy:update'
 ** transaction: start
  * executing `deploy:update_code'
...
 ** transaction: commit

但是,通常情况下这种方式是不怎么行得通的。首先,如果必须通过用户名和密码从 Subversion 库获取源代码的话,就显示如下。

% cap deploy:update
 * executing `deploy:update'
 ** transaction: start
  * executing `deploy:update_code'
  * executing "svn checkout -q  -r21 https://repository.oiax.jp/svn/ballad/trunk ..."
    servers: ["alpha.oiax.jp"]
    [alpha.oiax.jp] executing command
 ** [err] Authentication realm: <https://repository.oiax.jp:80> repository.oiax.jp
 ** Password for 'app':
Password: 

与目标主机登陆名(app)一样的用户可以检索 Subversion 库,而且,如果所有进行部署操作的开发人员都知道密码的话,直接在这里输入就可以了。但是实际上应该避免开发者之间共用密码。

因此,像下面一样改写 deploy.rb

set :application, "ballad"
set :svn_user, ENV['svn_user'] || ENV['USER']
set :svn_password, Proc.new { Capistrano::CLI.password_prompt('SVN Password: ') }
set :repository,
  Proc.new { "--username #{svn_user} " +
             "--password #{svn_password} " +
             "--no-auth-cache " +
             "https://repository.oiax.jp//svn/ballad/trunk/" }
set :deploy_to,   "/var/rails/#{application}"

set :user, "app"
set :use_sudo, false

role :app, "alpha.oiax.jp"
role :web, "alpha.oiax.jp"
role :db,  "alpha.oiax.jp", :primary => true

像这样执行 deploy:update 任务(Subversion 的用户名设为 kuroda)。

% svn_user=kuroda cap deploy:update

这个方法还是有一点问题。进程中会在命令提示符 SVN Password: 输入密码,但是这样 svn 命令会反映在画面中,密码就会被看见。这样的话,在和其它成员共同开发时就会很麻烦。

但是,如果养成了添加 -q 选项来执行任务的习惯的话,这个问题就可以避免了。

% svn_user=kuroda cap -q deploy:update

可是,也有可能因为一些原因导致命令在目标主机上的执行遭遇失败而中止。从显示在终端的文字中查找 * executing "..." 这个形式的最后一行,并复制包含在双引号内的指令,在目标主机上执行以查找原因。


[修正] 2008/05/17 配合以用户 app 登录远程主机的方式,对文章进行修改。

(2008/03/29)