JP.*_*JP. 6 ruby git heroku sinatra buildpack
我知道slug 编译器会删除.git在创建 heroku slug 时目录,但是有什么方法可以配置 Heroku 以便我可以从脚本中访问当前正在运行的 git 提交号?
我希望能够在我的 sinatra 应用程序(在 Heroku 中运行)上有一个小链接,上面写着“运行版本 e72fb274a0 ”(或类似的东西)。如何检索它,或强制 slug 编译器将其添加到环境变量中?
进步:
我认为最好的方法是制作一个自定义 buildpack,在删除 .git 目录之前将 git commit 版本号写入 heroku slug。
我已经尝试过这样做(请参阅我的 ruby buildpack 分支),但是我添加的行 –第 23 行– 似乎没有完成这项工作。Heroku 看到并使用新的 buildpack,但似乎没有将文件写入 slug。
任何人都知道为什么我的自定义 buildpack 没有按预期工作?
谢谢,
J.P
几个选项...
SOURCE_VERSION环境变量(构建时)自 2015 年 4 月 1 日起,有一个SOURCE_VERSION环境变量可用于在 Heroku 上运行的构建。对于 git-pushed 构建,这是正在构建的源的 git commit SHA-1:
https://devcenter.heroku.com/changelog-items/630
(感谢@srtech指出这一点!)
我在构建中使用该变量的一个示例- 如果您查看已部署应用程序提供的 HTML,您会看到提交 ID 出现在最底部附近的 HTML 注释中:https://gu-who。 herokuapp.com/
/etc/heroku/dyno元数据文件(运行时)Heroku 具有测试版功能,可以将/etc/heroku/dyno元数据文件写入正在运行的 dyno。如果您发送电子邮件支持,您可能会被添加到测试版中。这是 Heroku 自己使用它的地方:
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
}
}
Run Code Online (Sandbox Code Playgroud)
..这release.commit就是你所追求的领域。我曾经使用这种方法,直到SOURCE_VERSION变量可用。
您可以在部署之前运行一个存储此信息的脚本(可能在 YAML 上)
使用这些 a = `ls` (注意不是 ' "撇号" 符号是 ` "inverse Accute" 符号)
a 变量将具有此 bash 命令的结果,
因此您可以执行 git = `git log` 然后查找您想要的信息并存储它。因此您稍后可以检索它。
这有帮助吗?