【问题标题】:When during the slug build process does my rails app have access to the ENV variables set by Heroku?在 slug 构建过程中,我的 rails 应用程序何时可以访问 Heroku 设置的 ENV 变量?
【发布时间】:2017-09-24 06:15:58
【问题描述】:

我希望根据 Heroku Labs: Dyno Metadata 插件 (https://devcenter.heroku.com/articles/dyno-metadata) 设置的任何可能值使用缓存键将文件加载到我的 Rails 缓存中。

在那篇文章中,我正在寻找一个在 slug 构建过程早期可用的唯一标识符。

HEROKU_RELEASE_CREATED_AT: 2015-04-02T18:00:42Z HEROKU_RELEASE_VERSION: v42 HEROKU_SLUG_COMMIT: 2c3a0b24069af49b3de35b8e8c26765c1dba9ff0

这三个是我感兴趣的(上面的示例数据)。在我的资产预编译步骤中,我依赖于一个独特的值,我决定使用上述 3 个中的任何一个。此步骤在我的 rails 应用程序运行之前完成。

最初我尝试了HEROKU_RELEASE_VERSION,但我注意到它在 slug 构建过程完成之前没有设置,这意味着在我的资产预编译步骤中,它是nil

然后我尝试HEROKU_SLUG_COMMIT 看看这在资产预编译之前是否已知。它是否正确?从一些初始测试来看,它似乎可以正常工作(至少在资产预编译之前就知道了),但是我想知道这些设置的正确顺序。

如果这不是 ENV[] 中可用的较早值,有什么更好的建议?

====== 更新:

我一直在玩下面的配置值:

HEROKU_RELEASE_CREATED_AT: 2015-04-02T18:00:42Z HEROKU_RELEASE_VERSION: v42 HEROKU_SLUG_COMMIT: 2c3a0b24069af49b3de35b8e8c26765c1dba9ff0

我注意到在构建资产之前,上述值不会在构建前更改,而是在构建后更改。下面,我有下面的结果输出。如您所见,当前部署为2583508,但ENV['HEROKU_SLUG_COMMIT'] 在构建过程中返回8318914,直到应用程序完成,然后ENV['HEROKU_SLUG_COMMIT'] 更新为2583508

=== sample-app Releases - Current: v356
v356  Deploy 2583508   email@gmail.com    2017/04/26 20:05:51 -0400 (~ 40s ago)
v355  Deploy 8318914   email@gmail.com    2017/04/26 19:51:33 -0400 (~ 14m ago)
v354  Deploy c054f1e   email@gmail.com    2017/04/26 19:40:42 -0400 (~ 25m ago)

BROWSER RESTRICTIONS SLUG COMMIT: 83189141e4e45643bf71d9aa78604e479ea210f1

有没有办法在实际构建之前唯一地知道当前构建?也许不使用 heroku 实验室插件?

【问题讨论】:

    标签: ruby-on-rails ruby heroku asset-pipeline sprockets


    【解决方案1】:

    我收到了 Heroku 支持的回复,似乎解决了我正在寻找的需求。

    Heroku 的回应:

    不幸的是,在这一点上,我们的 dyno 元数据实验室标记和 在构建期间可用的配置变量并不完全匹配。 在构建期间,您可以使用 SOURCE_VERSION 环境变量, 这将是提交哈希。然后,在运行时,您可以使用 HEROKU_SLUG_COMMIT 获取相同的值。

    这种差异背后的原因主要是上下文的差异。 在构建期间命名该变量 HEROKU_SLUG_COMMIT 不会 感觉,因为它还不是蛞蝓。

    由于我们永远不会同时设置两个配置变量,因此您应该可以使用 其中任何一个,如果未设置,则回退到另一个。

    我现在的实现是: ENV["SOURCE_VERSION"] || ENV['HEROKU_SLUG_COMMIT'] 按此顺序。这对我有用。

    【讨论】:

      【解决方案2】:

      我已经自己解决了这个问题,方法是使用部署脚本并使用 heroku-cli 工具在推送代码之前使用新的提交哈希更新我的应用程序:

      部署.sh

      ...
      heroku config:set APP_VERSION=<commit hash> --app <your app name>
      git push heroku master
      ...
      

      【讨论】:

        猜你喜欢
        • 2017-03-21
        • 1970-01-01
        • 1970-01-01
        • 2014-04-28
        • 1970-01-01
        • 1970-01-01
        • 2020-07-02
        • 1970-01-01
        • 2016-06-06
        相关资源
        最近更新 更多