在自定义的Heroku Python buildpack中,如何设置config var?

时间:2013-02-28 02:07:47

标签: python django heroku buildpack

我正在尝试为我的Python应用程序设置自定义配置变量。具体来说,当前的SHA用作静态文件中的URL参数,以强制CDN在每次部署时重新启动。我正在尝试使用自定义buildpack,基于普通的Heroku Python one(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实际设置我的应用程序使用的配置变量。< / p>

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

1 个答案:

答案 0 :(得分:3)

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

编译是在完全不同的dyno上完成的,因为在应用程序的服务下,所以在编译时执行set-env可能会改变编译dyno的环境,但不会影响生产dynos的环境,这些dynos是旋转的后面。

我认为heroku labs:enable user-env-compile与此无关,因为它允许您在编译期间从配置中读取,但它不允许您写入它。

如果您真的想使用env变量,可以使用Heroku API's python bindings动态修改应用的配置。您还可以尝试使用已编译的输出在某处保存临时文件,然后从buildpack中启动dyno的部分中读取该文件。或者可以在启动时直接从生产dyno获取SHA,而不涉及编译dyno。

然而,所有这些都是相当不规则的,可能有一种更简洁的方法来实现在CDN上版本化静态文件的目标。