在自定义Heroku Python构建包中,如何设置配置变量?
我正在尝试为我的Python应用设置一个自定义的配置变量。具体来说,我想用当前的SHA值作为静态文件中的URL参数,以便在每次部署时强制CDN重新加载。我打算使用一个自定义的构建包,这个构建包是基于普通的Heroku Python构建包的(https://github.com/heroku/heroku-buildpack-python)。
目前,我已经开始修改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
,我觉得这是一个必要的步骤,但我就是搞不懂如何让构建包实际设置我应用的配置变量。
编辑:我根据Andrew的建议解决了这个问题。我创建了一个自定义构建包,它调用一个Python脚本,使用Heroku的Python绑定来设置变量,从构建包中读取环境变量。
1 个回答
如果我理解你的问题没错的话,你是想在编译的时候设置一个环境变量,但在运行时读取它(也就是在你的应用访问静态文件的时刻)。这样理解对吗?
编译是在一个和应用运行完全不同的环境中进行的,所以在编译时执行设置环境变量的操作,只会改变编译环境的设置,而不会影响到后面实际运行的环境。
我觉得 heroku labs:enable user-env-compile
这个命令在这里不太适用,因为它只是让你在编译时读取配置,但并不能让你写入配置。
如果你真的想使用环境变量,可以考虑使用 Heroku API的Python接口 来动态修改你应用的配置。你也可以尝试在某个地方保存一个临时文件,里面存放编译后的输出,然后在启动你的应用时从这个文件中读取。或者,也有可能在应用启动时直接从生产环境中获取SHA,而完全不涉及编译环境。
不过,这些方法都比较不常见,可能还有更简单的方法来实现你在CDN上对静态文件进行版本控制的目标。