1

Python アプリで使用するカスタム構成変数を設定しようとしています。具体的には、現在の SHA を静的ファイルの URL パラメーターとして使用して、デプロイごとに CDN を強制的に再プライミングします。通常の Heroku Python のビルドパック ( https://github.com/heroku/heroku-buildpack-python )に基づいて、カスタム ビルドパックで実行しようとしています。

compile現在、スクリプトの修正を開始しています。これまでのところ、必要な値を取得できましたが、GIT_DIR が設定解除される前に、30 行目あたりの上部近くまで実行されています。

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

その後、175行目あたりで、アプリの構成変数を設定する場所だと思います。私は自分自身を追加しようとしました:

set-env GIT_SHA '$GIT_SHA'

無駄に

heroku labs:enable user-env-compile必要なステップだと思う実行しましたが、ビルドパックを取得して、アプリが使用する構成変数を実際に設定する方法を理解することはできません。

編集 アンドリューの提案でこれを解決できました。Heroku python バインディングを使用して var を設定する Python スクリプトを呼び出すカスタム ビルドパックを作成し、ビルド パックに設定された環境変数から読み取ります。

4

1 に答える 1

3

If my understanding of your question is correct, you want to set an env variable at compile time, but read it during execution (whenever a static file URL is accessed in your app). Is that accurate?

Compilation is done on a totally different dyno than the application is served under, so executing set-env during compile time might change the environment of the compilation dyno but won't affect the environment of the production dynos, which are spun up later.

I don't think heroku labs:enable user-env-compile is relevant here because that lets you read from the config during compile time, but it does not allow you to write to it.

If you really want to use env variables, you could use the Heroku API's python bindings to dynamically modify the configuration of your app. You could also try to save a temporary file somewhere with the compiled output, and then read from that file in the part of your buildpack that starts up your dyno. Or it may be possible to fetch the SHA directly from a production dyno at start-up time, without involving the compilation dyno at all.

However, all of this is fairly irregular and there is probably a cleaner way to accomplish your goal of versioning static files on your CDN.

于 2013-02-28T02:19:34.690 に答える