2017-04-26 31 views
1

我正在寻找基于Heroku Labs:Dyno元数据插件(https://devcenter.heroku.com/articles/dyno-metadata)设置的任何可能值,使用缓存键将文件加载到我的rails缓存中。在slug构建过程中,我的rails应用程序是否可以访问由Heroku设置的ENV变量?

在那篇文章中,我正在寻找一个独特的标识符,可以在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 protected] 2017/04/26 20:05:51 -0400 (~ 40s ago) 
v355 Deploy 8318914 [email protected] 2017/04/26 19:51:33 -0400 (~ 14m ago) 
v354 Deploy c054f1e [email protected] 2017/04/26 19:40:42 -0400 (~ 25m ago) 

BROWSER RESTRICTIONS SLUG COMMIT: 83189141e4e45643bf71d9aa78604e479ea210f1 

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

回答

1

我已经通过使用部署脚本,并使用Heroku的-CLI工具推动代码之前与新提交的哈希来更新我的应用程序解决了这个我自己:

deploy.sh

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

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

Heroku的回应:

不幸的是,在这一点上,我们的测功机元数据的实验室标志和 配置乏构建过程中提供不完全匹配。 在构建过程中,可以使用SOURCE_VERSION环境变量 ,它将成为提交哈希。然后,在运行时,您可以使用 HEROKU_SLUG_COMMIT获取相同的值。

这种差异背后的原因大多是上下文的差异。 在构建过程中命名该变量HEROKU_SLUG_COMMIT不会使 有意义,因为它不是slu yet子弹。

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

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

相关问题