Rails 3.2: 为什么我的 master 分支从我的 rails4 upgrade 分支看到 capistrano-stats gem 我可以部署 master 吗?

Rails 3.2: Why does my master branch see the capistrano-stats gem from my rails4 upgrade branch and can I deploy master?

我在 rails4 b运行ch 工作了一段时间,将应用程序从 Rails 3.2 升级到 Rails 4.2。与此同时,我意识到以前合并到 master 中的一些东西从未部署过,所以我切换回 master 和 运行 cap production deploy

突然间,我从 capist运行o 那里得到了这个我以前从未见过的提示:

MBA:myapp david$ cpd
        Would you like to enable statistics?  Here is an example message we would
        send:

      1|2015-01-21T10:59:17-05:00|1.9.3|x86_64-darwin14.0.0|3.3.5|c52f7ecf

如前所述,我之前部署的时候从来没有收到过这个提示。这是我 Gemfile.lockmaster:

上的 capist运行o
capistrano (3.2.1)
      i18n
      rake (>= 10.0.0)
      sshkit (~> 1.3)
    capistrano-bundler (1.1.3)
      capistrano (~> 3.1)
      sshkit (~> 1.2)
    capistrano-rails (1.1.2)
      capistrano (~> 3.1)
      capistrano-bundler (~> 1.1)

...在 rails4 上:

 capistrano (3.3.5)
      capistrano-stats (~> 1.1.0)
      i18n
      rake (>= 10.0.0)
      sshkit (~> 1.3)
    capistrano-bundler (1.1.3)
      capistrano (~> 3.1)
      sshkit (~> 1.2)
    capistrano-rails (1.1.2)
      capistrano (~> 3.1)
      capistrano-bundler (~> 1.1)
    capistrano-stats (1.1.1)

我立即注意到 capistrano-stats 存在于 rails4 b运行ch 的 Gemfile.lock 中,但不存在于 master 中。然而,在部署 master 时,即使我在 master b运行ch 上 运行 bundle install 部署之前,我仍然会收到统计提示。

有人可以解释这是如何与 Git 一起工作的,以及此时部署 master 的后果是什么,因为它似乎从 [=15] 中看到了东西(宝石) =] b运行ch 即使我没有合并它?

如果您正在部署 master,但您已经签出本地 git 中的 rails4 分支,您仍在使用本地配置进行部署(来自 rails4分支)。

这是因为 Capistrano 不会检查您要在本地部署的分支,只会在您要部署到的服务器上检查并在完成之前加载配置。

更新

我们发现,运行 和没有 bundle exec 运行s 不同版本的 capistrano(bundle exec 是正确的版本)。

如果你有多个版本的capistrano,可能会选择非本地版本,但会选择最高版本。

为了解决这个问题,您可以使用 bundle binstub cap 为您的 capistrano 生成一个 binstub;之后您会看到已添加一个可执行文件(如 ./bin/cap),如果您将 ./bin 添加到 PATH,您将能够 运行 而无需 bundle exec 再次.