【问题标题】:Rails 3.2: Why does my master branch see the capistrano-stats gem from my rails4 upgrade branch and can I deploy master?Rails 3.2:为什么我的 master 分支会看到我的 rails4 升级分支中的 capistrano-stats gem,我可以部署 master 吗?
【发布时间】:2015-01-21 16:09:56
【问题描述】:

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

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

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上的capistrano:

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 分支的 Gemfile.lock 中,但不存在于 master 中。然而,即使我在部署之前在master 分支上运行bundle install,在部署master 时仍然会收到统计信息提示。

有人可以解释这是如何与 Git 一起工作的吗,以及部署 master 的后果是什么,因为即使我没有合并,它似乎从 rails4 分支看到东西(宝石)它?

【问题讨论】:

    标签: ruby-on-rails ruby git gem capistrano


    【解决方案1】:

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

    这是因为 capistrano 不会签出您要在本地部署的分支,仅在您要部署到的服务器上签出,并在此之前加载配置。

    更新

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

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

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

    【讨论】:

    • 对不起,我没有关注你。 rails4 分支存在,但我在进行部署之前检查了 masterrails4 内部的订单是 git checkout master -> bundle install -> cap production deploy
    • 对我上一条评论的更正:我确实理解您所说的 capistrano 检查要部署在服务器上而不是本地的分支的意思。但是我仍然不明白为什么我的 master 分支中的那个 gem 似乎只存在于 rails4 分支中时会收到提示。
    • 如果你运行 spring stop 然后再运行 capistrano 会发生这种情况吗?
    • 你能发布cap -v的输出吗?另一种选择:如果您使用 bundle exec cap ... 运行部署会发生什么?
    • 当我从主分支运行cap -v 时,我得到Capistrano Version: 3.3.5 (Rake Version: 10.4.2)。 3.3.5 是我在rails4 分支上升级到的版本。但是....当我在部署命令前加上 bundle exec 时,看起来一切都像以前一样正常工作!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-26
    • 1970-01-01
    • 2019-06-11
    • 1970-01-01
    • 2021-06-06
    • 2020-09-07
    相关资源
    最近更新 更多