版本锁定

默认情况下,Capistrano 会在 deploy.rb 的顶部包含一个 lock 命令。这将检查运行配置的 Capistrano 版本是否与预期运行的版本相同。

这样做的原因是,在没有 Bundler 的世界中,或者当没有使用 Bundler 时,Capistrano 可能会以意外且不清楚的方式与不兼容的配置一起使用。即使在今天,也很容易在没有 bundle exec 或 binstub (bin/cap,通过 bundle binstub capistrano 获得) 的情况下运行 Capistrano,从而导致意外行为。

锁的语法与 Bundler 在 Gemfile 中使用的语法相同(参见下面的实现部分)。

最简单的形式是:lock '3.9.0'。这将配置锁定到给定的确切版本。

最实用的形式是使用悲观运算符:~> 3.9.0。这允许最后一个部分的版本号增加,而所有之前的部分都被锁定。例如,如果您使用 lock '~> 3.9.2',版本 3.9.3 将被允许,但 3.9.13.10.04.0.0 将不被允许。通常,您需要锁定到 major.minor 版本。这意味着主版本不能增加,但次版本可以增加,这与语义版本控制(Capistrano 遵循,松散地)一致。

您也可以在版本号之前使用 ><<=>==,例如 lock '>= 3.9.0'。如果您想锁定到一组特定的规则,这些方法很有用。

对于更复杂的用法,您可以组合运算符。例如,您可以编写 lock ['>= 3.9.0', '< 3.9.10'],这将允许从 3.9.0 到 3.9.9 的所有版本,但不允许 3.9.10 或更高版本。

实现

代码重用了 RubyGems 核心 版本比较逻辑。因此,您在 RubyGems 中可以做到的任何事情,您都可以在这里做到。

Fork me on GitHub