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了我认为是必要的步骤,但我无法终生弄清楚如何让 buildpack 实际设置我的应用程序使用的配置变量。

编辑 能够通过安德鲁的建议解决这个问题。我创建了一个自定义构建包,它调用一个 Python 脚本,该脚本使用 Heroku python 绑定来设置 var,从构建包中设置的环境变量中读取它。

4

1 回答 1

3

如果我对您的问题的理解是正确的,您希望在编译时设置一个 env 变量,但在执行期间读取它(每当在您的应用程序中访问静态文件 URL 时)。那准确吗?

编译是在与应用程序完全不同的 dyno 上完成的,因此在编译期间执行 set-env 可能会改变编译 dyno 的环境,但不会影响稍后启动的生产 dyno 的环境。

我认为heroku labs:enable user-env-compile这里无关紧要,因为这使您可以在编译时从配置中读取,但不允许您对其进行写入。

如果你真的想使用环境变量,你可以使用Heroku API 的 python 绑定来动态修改你的应用程序的配置。您还可以尝试使用已编译的输出在某处保存一个临时文件,然后在启动您的测功机的 buildpack 部分中从该文件中读取。或者可以在启动时直接从生产测功机获取 SHA,根本不涉及编译测功机。

但是,所有这些都是相当不规则的,并且可能有一种更简洁的方法来实现您在 CDN 上对静态文件进行版本控制的目标。

于 2013-02-28T02:19:34.690 回答