2007 年 10 月 14 日,星期日

Capistrano 2.1

jamis 发布

经过比预期的更大幅度的延迟之后,Capistrano 2.1 现已推出!(Capistrano 是一款用于在多台远程计算机上并行执行命令的实用工具,并且是许多 Rails 开发人员为自动部署而选择的工具。)此次发布的内容非常多,其中包括一些非常令人兴奋的更改。一如既往,通过 RubyGems 使用以下方式进行安装

  gem install capistrano

以下列出了新内容,大体上按照重要性排序

不再有默认 PTY在 2.1 之前,Capistrano 会为其执行的每一条命令请求一个伪终端。这样做会导致用户的配置文件脚本不会加载。嗯,现在不行了!从 2.1 开始,Capistrano 不再为每一条命令请求一个 pty,这意味着你的 .profile(或 .bashrc,或其他任何内容)将在每一条命令上正常加载!不过,请注意,有些人报告了在某些系统上,当未分配 pty 时,一些命令会自动进入非交互模式。如果你没有看到命令像以前那样提示符,比如 svn 或 passwd,你可以通过将以下行添加到你的 capfile 中来恢复到以前的行为

  default_run_options[:pty] = true

禁用 sh 包装。某些共享主机不允许使用 POSIX shell 来执行任意命令,而自 2.0 以来,Capistrano 一直在这样做。如果你在这样的主机上,则可以将以下行添加到你的 capfile 中

  default_run_options[:shell] = false

Capistrano 会直接运行命令,而不是将其包装在“sh -c”命令中。不过,请注意,这意味着你在远程主机上的用户 shell 必须POSIX 兼容,否则你会收到晦涩的错误。

Git SCM 支持。非常感谢 Garry Dolley、Geoffrey Grosenbach 和 Scott Chacon 为 Capistrano 编写新的 Git SCM 模块所做的工作。如果你是一个 Git 用户,你现在可以这样做了

  set :scm, :git

Accurev SCM 支持。感谢 Doug Barth,所有 Accurev 用户现在也可以享受 Capistrano 了。只需执行

  set :scm, :accurev

Rails 的插件支持。通过“capify”实用工具生成的 Capfile 现在将包含一行,该行会自动加载 vendor/plugins/*/recipes/*.rb 中的所有配方。如果你想要此功能,并且你已有 Capfile(并且不介意丢失对 Capfile 所做的任何更改),则可以删除 Capfile 并重新运行“capify”。或者,你可以在你的 Capfile 中添加以下行,位于加载“config/deploy”的那一行之前

  Dir['vendor/plugins/*/recipes/*.rb'].each { |plugin| load(plugin) }

Windows 安全读取。任何时候 Capistrano 需要读取文件的內容时,它现在都将使用“b”标志,这样就不会损坏 Windows 上的二进制读取文件。

Cap shell 和 sudo。Capistrano shell 现在可以正确识别 sudo 命令,并正确提示输入密码。

使用 `match’ 来检查依赖项。存在用于 deploy:check 的新远程依赖项方法: “match”。您现在可以在各种命令的输出中查找任意正则表达式,以查看事物是否正确设置

  depend :remote, :match, "rake -V", /version 0\.7/

Namespaces#top。有时您会希望在另一个任务中执行任务,但目标任务的父名称空间与同名名称空间冲突,并且会出现故障。您现在可以使用 “top” 方法跳转到名称空间层次结构的顶部

  namespace :apache do
    namespace :deploy do
      task :restart do
        run "restart apache"
        top.deploy.restart
      end
    end
  end

其他更改。还有许多其他细微的错误修复和更改

  • 上传时,默认设置为 0664,而不是 0660。
  • 修复 deploy:pending 以查询 SCM 以进行后续修订,以便它不包括上次部署的更改。
  • 通过 Subversion 查询最新修订时,优先选择“最后更改的修订”而不是“修订”。
  • 明确要求在 copy_test 中使用“stringio”。
  • 当 Subversion#query_revision 失败时,给出更合理错误。
  • 不要在非发布服务器上运行 upgrade:revisions 任务。
  • 默认情况下,对 subversion 使用 —password 开关,但对于那些不想在命令行上发送密码的用户,添加 :scm_prefer_prompt 变量。
  • 使用 sudo -p 开关将 sudo 密码提示设置为可预测的值。
  • 允许独立配置在同一 Ruby 进程中要求相同的配方文件。
  • 允许通过 :scm_auth_cache 启用 subversion 凭据的身份验证缓存。
  • 当用作 “on” hook 的源时,不应让一个任务触发它自己。
  • 添加 version_dir、current_dir 和 shared_dir 变量,以命名部署中使用的目录。
  • 使用 :runner 变量来确定 deploy:restart 中 sudo 的身份。
  • 更改 “-h” 输出,使其不表明 “-q” 为默认值。

尽情享受!并在 Rails trac 中报告任何错误,并将其组件设置为 “Capistrano”。