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 执行任意命令,而 Capistrano 从 2.0 版本以来一直是这样做的。如果您使用的是此类主机,可以在您的 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 查询最新修订版时,优先使用“Last Changed Rev”而不是“Revision”。
  • 在 copy_test 中显式需要 'stringio'。
  • 当 Subversion#query_revision 失败时,给出更合理的错误。
  • 不在发布服务器上运行 upgrade:revisions 任务。
  • 默认使用 --password 开关进行 subversion,但为那些不希望在命令行中发送密码的用户添加了 :scm_prefer_prompt 变量。
  • 使用 sudo -p 开关将 sudo 密码提示设置为可预测的值。
  • 允许独立的配置在同一个 Ruby 进程中需要同一个配方文件。
  • 允许通过 :scm_auth_cache 启用 subversion 凭据的身份验证缓存。
  • 当任务用作“on”钩子的源时,不要让任务触发自身。
  • 添加 version_dir、current_dir 和 shared_dir 变量来命名部署中使用的目录。
  • 使用 :runner 变量来确定为 deploy:restart 使用 sudo 的用户。
  • 更改“-h”输出,使其不再显示“-q”是默认值。

请享用!如有任何 bug,请在 Rails trac 上报告,并将组件设置为“Capistrano”。