如何通过Python更新或创建Heroku应用的Config Var
在Heroku Python Worker中持久化更新/新增Config Vars
你用os.environ修改的只是当前Worker进程内的临时环境变量,不会同步到Heroku平台的持久化存储,所以重启进程或在官网设置页看不到变化。要实现持久化修改,必须通过Heroku Platform API操作。
实现步骤
1. 获取Heroku API授权令牌
你需要一个有权限操作目标应用的API令牌:
- 登录Heroku账户,进入「Account settings」→「API Key」,复制你的API密钥(或者用Heroku CLI执行
heroku auth:token获取临时令牌)。 - 将这个令牌作为Config Var添加到你的Heroku应用中,比如命名为
HEROKU_API_TOKEN(通过官网设置页或CLI命令heroku config:set HEROKU_API_TOKEN=你的令牌)。
2. 使用Python调用API修改Config Vars
用requests库发送API请求,实现Config Vars的新增或更新。首先确保requests在你的requirements.txt中:
requests>=2.31.0
然后编写代码:
import os import requests def update_heroku_configs(app_name, config_changes): # 从环境变量读取API令牌 api_token = os.environ.get("HEROKU_API_TOKEN") if not api_token: raise ValueError("请先设置HEROKU_API_TOKEN环境变量") # 构造API请求参数 api_url = f"https://api.heroku.com/apps/{app_name}/config-vars" request_headers = { "Authorization": f"Bearer {api_token}", "Accept": "application/vnd.heroku+json; version=3" } # 发送PATCH请求(合并更新,不会覆盖未指定的变量) response = requests.patch(api_url, json=config_changes, headers=request_headers) response.raise_for_status() # 抛出请求错误,方便排查问题 return response.json() # 示例用法 if __name__ == "__main__": # 替换为你的Heroku应用名称,也可以存到Config Var里 target_app = "your-app-name" # 要新增或更新的Config Vars键值对 changes = { "NEW_VAR": "persistent_value", "EXISTING_VAR": "updated_value" } try: updated_configs = update_heroku_configs(target_app, changes) print(f"Config Vars更新成功:{updated_configs}") # 如果当前Worker需要立即使用新值,手动更新当前进程的环境变量 os.environ.update(updated_configs) except Exception as e: print(f"更新失败:{str(e)}")
关键说明
- PATCH请求特性:该API使用
PATCH方法,只会合并你指定的键值对,不会删除或覆盖未在config_changes中提及的现有Config Vars。 - 当前进程生效:调用API后,平台上的Config Vars已经更新,但当前Worker进程的
os.environ不会自动同步。如果需要立即使用新值,手动执行os.environ.update(updated_configs)即可。 - 权限注意:确保你的API令牌拥有目标应用的「operate」权限,否则会返回权限错误。
内容的提问来源于stack exchange,提问作者xgf115
相关产品推荐
相关产品推荐

