如何在heroku ps:exec进入dyno后设置特定环境配置变量?
解决Heroku ps:exec中加载应用配置变量的问题(Python项目适用)
方法1:加载所有配置变量到当前会话
Heroku dyno的主进程(通常PID为1)已经包含了所有通过heroku config:set设置的变量,你可以通过系统的/proc文件系统读取并加载到exec会话中:
进入heroku ps:exec后,执行以下命令:
# 提取主进程环境变量并转为shell可识别的格式,加载到当前会话 cat /proc/1/environ | tr '\0' '\n' > .env.tmp && source .env.tmp && rm .env.tmp
执行完后,你可以用env命令验证变量是否已加载,之后直接运行Python脚本或命令即可正常读取这些配置变量。
方法2:仅加载指定的配置变量
如果只需要部分变量,无需加载全部,可以单独提取目标变量并注入到命令环境:
比如要加载DATABASE_URL和SECRET_KEY,执行:
DATABASE_URL=$(grep -z DATABASE_URL /proc/1/environ | tr '\0' '\n' | cut -d= -f2-) \ SECRET_KEY=$(grep -z SECRET_KEY /proc/1/environ | tr '\0' '\n' | cut -d= -f2-) \ python your_script.py
你的Python代码可以直接通过os.environ.get("DATABASE_URL")这类方式读取到对应变量。
方法3:结合python-dotenv使用
如果你的项目已经依赖python-dotenv库,可以先生成本地.env文件再让脚本自动加载:
# 将主进程的所有环境变量导出为.env文件 cat /proc/1/environ | tr '\0' '\n' > .env
确保你的Python脚本中包含from dotenv import load_dotenv; load_dotenv()的调用,运行脚本时就会自动加载这些配置变量。
内容的提问来源于stack exchange,提问作者Allen Y
相关产品推荐
相关产品推荐

