【问题标题】:How do I send a variable between Capistrano and Rails?如何在 Capistrano 和 Rails 之间发送变量?
【发布时间】:2011-01-25 18:56:49
【问题描述】:

我有一个使用 Capistrano 部署的 Rails 应用程序,在我们的验收环境中,我想设置页面标题以包含当前部署的分支。

该分支是通过 Capistrano 部署的,我想以某种方式将该信息从 Cap 迁移到 Rails。

显然我可以让 Cap 将分支名称写入文件并在 Rails 中读回,但我希望有更好的解决方案。

我已经尝试了一些设置 default_environment 的实验,但我假设这似乎没有奏效,因为这些环境变量只存在于 Capistrano 创建的 shell 中。

有什么建议吗?

【问题讨论】:

    标签: ruby-on-rails ruby deployment capistrano


    【解决方案1】:

    显然我可以让 Cap 编写 将名称分支到文件并读取它 回到 Rails 中

    这是最好的方法,IMO

    【讨论】:

      【解决方案2】:

      这是一种甚至不需要 Capistrano 的方法,尽管它确实需要 git。通过捕获在 Rails 初始化程序中运行 git 命令的输出来读取分支名称:

      # config/initializers/set_title.rb
      module MyConfig
        TITLE = `git symbolic-ref HEAD`.chomp.split("/").last
      end
      

      然后只引用模板中的常量:

      <title><%= MyConfig::TITLE %></title>
      

      【讨论】:

      • 是的,我也想过类似的事情,但问题是我总是以“部署”分支结束。我不确定这是使用 Capistrano 进行部署的产物还是与使用 Github 的部署密钥有关。
      • 啊,你是对的。它必须在部署时创建一个新分支。您可以尝试从git log --decorate 获取输出的第一行,它看起来具有来自远程存储库的分支名称和标签名称。或者也许 git 有另一种方法来做到这一点。
      • 有趣。看起来它可能不一定是一致的,但值得一看。谢谢。
      猜你喜欢
      • 1970-01-01
      • 2015-07-16
      • 1970-01-01
      • 1970-01-01
      • 2011-03-29
      • 1970-01-01
      • 2016-08-15
      • 1970-01-01
      • 2016-01-02
      相关资源
      最近更新 更多