【问题标题】:In a custom Heroku Python buildpack, how can I set a config var?在自定义 Heroku Python buildpack 中,如何设置配置变量?
【发布时间】:2013-02-28 02:07:46
【问题描述】:

我正在尝试为我的 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,从构建包中设置的环境变量中读取它。

【问题讨论】:

    标签: python django heroku buildpack


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • 基本上,我希望得到与在命令行上运行 heroku config:set 相同的结果。
    • 那么你需要使用上面答案中链接的 Heroku API python 绑定。据我所知,这是从应用程序内部影响配置的唯一方法。您可以预先使用heroku config:set 告诉您的应用它自己的名称和您自己的 API 密钥,然后动态访问该信息并使用它来添加额外的配置变量。
    猜你喜欢
    • 2012-08-08
    • 1970-01-01
    • 1970-01-01
    • 2021-05-06
    • 2015-07-09
    • 2010-11-29
    • 1970-01-01
    • 2016-10-24
    相关资源
    最近更新 更多