2013-02-28 110 views
1

我想爲我的Python應用程序設置一個自定義的配置變量來使用。具體而言,將當前的SHA用作靜態文件中的URL參數,以強制CDN在每次部署時重新啓動。我試圖用一個自定義的buildpack來完成,基於普通的Heroku Python(https://github.com/heroku/heroku-buildpack-python)。在自定義的Heroku Python buildpack中,如何設置配置var?

我現在在哪裏,我已經開始修改compile腳本。到目前爲止,我已經能夠得到我所需要的價值,但在頂部附近跑起來,圍繞30日線之前GIT_DIR未設置

export GIT_SHA=$(git log -1 --format="%h")

再後來,周圍線175,我認爲是它設置應用程序的配置變量。我嘗試添加我自己:

set-env GIT_SHA '$GIT_SHA'

無濟於事

我已經運行heroku labs:enable user-env-compile我認爲這是一個必要的步驟,但我不能爲我的生活弄清楚如何獲得該buildpack實際上爲我的應用程序使用配置var。

編輯 能夠解決這個與安德魯的建議。我創建了一個自定義buildpack,它調用一個使用Heroku python綁定來設置var的Python腳本,並從構建包中設置的環境變量中讀取它。

回答

3

如果我對你的問題的理解是正確的,你希望在編譯時設置一個env變量,但是在執行期間讀取它(每當你的應用程序訪問一個靜態文件的URL時)。這是否準確?

編譯是在完全不同的dyno上完成的,因此在編譯期間執行set-env可能會改變編譯dyno的環境,但不會影響生產dynos的環境稍後再來。

我不認爲heroku labs:enable user-env-compile在這裏是相關的,因爲它允許您在編譯期間從配置讀取,但它不允許您寫入它。

如果您確實想要使用env變量,則可以使用Heroku API's python bindings來動態修改您的應用程序的配置。你也可以嘗試在編譯輸出的某個地方保存一個臨時文件,然後從buildpack中啓動你的d​​yno的部分讀取該文件。或者可能在開機時直接從生產測試儀中獲取SHA,而不涉及編譯測試儀。

但是,所有這些都是相當不規則的,並且可能有一個更簡潔的方法來實現您在CDN上對靜態文件進行版本控制的目標。

+0

本質上,我想最終獲得與在命令行上運行'heroku config:set'相同的結果。 – 2013-02-28 02:40:30

+0

然後,您需要使用上面的答案中鏈接的Heroku API python綁定。就我所知,這是從應用程序內部影響配置的唯一方法。您可以事先使用'heroku config:set'來告訴您的應用程序自己的名稱和您自己的API密鑰,然後動態訪問該信息並使用它來添加額外的配置變量。 – 2013-02-28 02:45:44

相關問題