2012-08-31 21 views
3

我知道slug compiler在創建heroku slug時刪除.git目錄,但是有什麼方法可以配置Heroku,以便我可以從我的腳本中訪問當前正在運行的git提交號?在Heroku應用程序中訪問當前git提交號

我希望能夠在我的sinatra應用程序(在Heroku中運行)上有一個小鏈接,它說「正在運行version e72fb274a0」(或類似的東西)。我如何檢索這個,或強制slug編譯器將它添加到環境變量?

進展情況:

我認爲要做到這一點的最好辦法是使該寫入git的承諾版本號Heroku的廢料被刪除.git目錄前一個自定義buildpack。

我試過這樣做(請參閱my fork of the ruby buildpack),但我添加的行 - line 23 - 似乎沒有完成這項工作。 Heroku看到&使用新的buildpack,但似乎沒有將文件寫入slug。

任何人都有任何想法,爲什麼我的自定義buildpack不能按預期工作?

感謝,

JP

回答

1

可以之前運行的腳本部署商店使用這些部件的=`ls`該信息(也許在YAML)

(注意不是'「撇號「符號是」反向運算「符號)
變量將具有此bash命令的結果
因此您可以執行 git =`git log` 然後找到所需的信息並存儲它。 所以你可以稍後檢索它。

這幫了個什麼忙嗎?

+0

這就是大多數的方式出現 - 謝謝!有一個命令可以創建該文件('git show --pretty =%H | head -n 1> commit.txt'),但我不知道如何創建一個heroku pre-hook或類似的將它放入slu - - 你呢? –

+0

我不知道,我會尋找'git prereceive hook',但是我聽說有很多人在Heroku和prereceive hooks在一起出現問題,所以請檢查一下! – iGallina

4

幾個選項...

SOURCE_VERSION環境變量(編譯時)

自2015年4月1日,有可用的SOURCE_VERSION環境變量來建立在​​Heroku上運行。對於git的推建立,這是git的承諾源的SHA-1正在興建

https://devcenter.heroku.com/changelog-items/630

(感謝@srtech爲pointing that out!)

一個example of me using that variable in a build - 如果你看看在由部署應用服務的HTML,你會看到提交ID來了,雖然在接近最底部HTML註釋:https://gu-who.herokuapp.com/

/etc/heroku/dyno元數據文件(運行時間)

Heroku有beta功能可以將/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 
    } 
} 

..所以release.commit是你後場。我曾經使用這種方法,直到SOURCE_VERSION變量可用。