2013-02-28 111 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

相关问题