版本锁定
默认情况下,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.1
、3.10.0
和 4.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 中可以做到的任何事情,您都可以在这里做到。