icon Capistrano 入门

第8章 deploy:rollback 与 deploy:cleanup

这章是关于 deploy:rollback 任务和 deploy:cleanup 任务的介绍。


执行 deploy:update 任务时,Capistrano 能从 Subversion 等库中获取源代码,详细地查看的话,还有很多东西。

  • releases 目录下创建一个基于当前时刻,以 YYmmddHHMMSS 为形式的子目录,在那里可获取最新的源代码。
  • 在子目录创建一个到目录 shared/log 的符号链接。
  • 创建一个从 current 目录到子目录的符号链接。

总之,Capistrano 能取得以前获取过的源代码,并根据符号链接的改建运行最新版。


deploy:rollback 这个任务的作用是返回前一个源代码并重启应用程序。具体来说就是将 current 目录的连接地址替换为获取了前一个源代码的目录,删除最新源代码,执行 deploy:restart 任务。

这是在应用程序刚开始部署的情况下发现重大错误,希望立即返回原始状态的任务。

  * executing `deploy:rollback'
  * executing `deploy:rollback_code'
  * executing "ls -x /var/rails/ballad/releases"
    servers: ["alpha.oiax.jp"]
    [alpha.oiax.jp] executing command
    command finished
  * executing "rm /var/rails/ballad/current; ln -s /var/rails/ballad/releases/20080517010640
/var/rails/ballad/current && rm -rf /var/rails/ballad/releases/20080518014637"
    servers: ["alpha.oiax.jp"]
    [alpha.oiax.jp] executing command
    command finished
  * executing `deploy:restart'
  * executing "/var/rails/ballad/current/script/process/reaper"
    servers: ["alpha.oiax.jp"]
    [alpha.oiax.jp] executing command
 ** [out :: alpha.oiax.jp] Restarting 17952
 ** [out :: alpha.oiax.jp] Restarting 17962
 ** [out :: alpha.oiax.jp] Restarting 17964
 ** [out :: alpha.oiax.jp] Restarting 17960
    command finished

另外,反复执行 deploy:update 任务的话,会在目标主机上堆积旧的源代码。因为浪费磁盘空间,所以希望留下几代,剩下的都从最新版清除。

这种时候,执行 deploy:cleanup 任务。

默认情况下将清除 5 代左右的源代码。需要留下的代数可由 keep_releases 变量控制,所以在 config/deploy.rb 作如下书写的话,大概留下 3 代的源代码。

set :keep_releases, 3

执行实例:

  * executing `deploy:cleanup'
  * executing "ls -x /var/rails/ballad/releases"
    servers: ["alpha.oiax.jp"]
    [alpha.oiax.jp] executing command
    command finished
 ** keeping 3 of 5 deployed releases
  * executing "rm -rf /var/rails/ballad/releases/20080512155340
/var/rails/ballad/releases/20080513092114"
    servers: ["alpha.oiax.jp"]
    [alpha.oiax.jp] executing command
    command finished

(2008/05/18)