heroku控制台显示来自git部署的最新sha哈希

Nik*_* So 7 git ruby-on-rails heroku

我有一个在Heroku上托管的开发分支,我们有几个人使用这个分支查找bug,很高兴显示最新部署在Heroku上的提交的SHA-1哈希,以便我们知道哪些bug属于提交.

但我完全找不到任何方法来查找这些信息.heroku运行控制台中的ENV变量中没有任何内容.虽然"heroku发布"确实显示了部署信息列表,包括SHA-1哈希的前几个字符,但这让我认为Heroku必须存储它,但我无法找到它.有人知道吗?

我意识到我并没有像我应该那样明确地提出这个问题:我想在Heroku上找到Rails里面的SHA-1哈希.就像我可以这样做:

<h1><%= ENV['REV']</h1>
Run Code Online (Sandbox Code Playgroud)

谢谢!

red*_*nce 10

像任何其他远程Git仓库一样对待Heroku - 您可以使用git ls-remote:

git ls-remote heroku

(heroku这里是远程名称)

更新:

由于OP实际上是想在Ruby env中获取SHA,因此一种可能的方法是使用自定义buildpack.

要开始使用,请转到Heroku的Ruby Buildpack并进行分叉,以便您可以自己制作变体.现在克隆你的fork并看一看lib/language_pack/ruby.rb.添加一个新方法,例如:

def get_SHA
    #get SHA
    #save SHA to ENV, ala: ENV['SHA'] = retrieved_sha
end
Run Code Online (Sandbox Code Playgroud)

你如何获得SHA取决于你.你可以执行一个git命令并使用返回的内容:

git log -1 --format="%H"

或者您可以使用@ avaynshtok的建议并使用Heroku gem来使用该releases方法.

然后,一旦有了SHA,就将其设置为ENV var.

接下来,找到compile方法ruby.rb,并将get_sha方法添加到它的末尾:

def compile
    Dir.chdir(build_path)
    install_ruby
    setup_language_pack_environment
    allow_git do
        install_language_pack_gems
        build_bundler
        create_database_yml
        install_binaries
        run_assets_precompile_rake_task
        get_sha #your additional method
    end
end
Run Code Online (Sandbox Code Playgroud)

将更改推回到GitHub,现在转到命令行.您需要为Heroku应用添加新的配置变量:

heroku config:add BUILDPACK_URL=git@github.com:<your GitHub username>/heroku-buildpack-ruby.git

请注意,您需要确保替换<your GitHub username>为......好吧,您的GitHub用户名,以便指向您的分叉回购.

最后,执行最后一个命令,该命令启用Heroku实验室功能,允许slug编译器访问用户变量:

heroku labs:enable user_env_compile

现在你应该全力以赴.那么现在究竟发生了什么?好吧,当你推送到Heroku时,Heroku将收到更改,然后看到你有一个自定义buildpack网址集.因此它将从GitHub获取您的自定义buildpack,然后使用它来创建slug.这意味着一旦它运行所有默认编译命令,它将以您的get_sha方法结束,该方法应将ENV var SHA设置为适当的SHA.现在你应该可以从Ruby中访问那个ENV变量,以及你将要做的事情.