三种不同的选择,最好的第一个...
SOURCE_VERSION
环境变量(构建时)
从2015年4月1日起,SOURCE_VERSION
可用于在 Heroku 上运行的构建的环境变量。对于 git-push 构建,这是正在构建的源的 git commit SHA-1:
https://devcenter.heroku.com/changelog-items/630 https://devcenter.heroku.com/changelog-items/630
(感谢@srtech指出这一点 https://stackoverflow.com/a/29425999/438886!)
/etc/heroku/dyno
元数据文件(运行)
Heroku 有beta功能写出/etc/heroku/dyno
元数据文件到您正在运行的测功机上。如果您向支持人员发送电子邮件,您可能会被添加到测试版中。这是 Heroku 自己使用它的地方:
https://github.com/heroku/fix/blob/6c8ab7a/lib/heroku_dyno_metadata.rb https://github.com/heroku/fix/blob/6c8ab7a/lib/heroku_dyno_metadata.rb
内容如下:
{
"dyno":{
"physical_id":"161bfad9-9e83-40b7-b385-78305db2f168",
"size":1,
"name":"run.7145"
},
"app":{
"id":null
},
"release":{
"id":50,
"commit":"2c3a0b24069af49b3de35b8e8c26765c1dba9ff0",
"description":null
}
}
..so release.commit
是你所追求的领域。
SBT 特定:使用sbt-heroku
在本地构建 slug
我最初的解决方案是使用sbt-heroku https://github.com/heroku/sbt-herokuHeroku 自己发布的插件。这意味着不再通过以下方式进行部署git push
(在 Heroku 自己的基础设施上编译 slug),而是编译 sluglocally并将其直接上传到 Heroku。因为 slug 是在本地编译的,所以在我的工作仓库中,Git 信息都在那里,构建过程可以轻松识别提交 ID https://github.com/guardian/prout/blob/9f98e71/build.sbt#L18并将其嵌入到应用程序的代码中。
该 slug 的大小比 Git diff 的大小要大得多(90MB vs 0.5KB),但除此之外,该解决方案运行得相当不错。我实际上正在使用 Travis 进行持续部署,所以 Travis 正在做sbt stage deployHeroku https://github.com/guardian/prout/blob/9f98e713/.travis.yml#L6-L7对我来说(Git 提交 ID 在构建时在该环境中可用),这意味着我可以在移动时从我的笔记本电脑进行 git-push,而 Travis 会将大型 slug 上传到 Heroku。