如何在Heroku应用中添加.env文件或配置环境变量以区分运行环境?
嘿,我明白你想区分Heroku生产环境和本地开发环境的需求,但你之前走了个弯路——Heroku的dyno是临时的,你在heroku run bash里装vim的操作完全没用,退出后所有修改都会消失,而且Heroku设置环境变量根本不需要编辑.env文件。我来给你说正确的做法:
先纠正一个关键误解
Heroku上的环境变量不需要通过
.env文件配置,它有自己的平台级配置系统,而且你在heroku run bash里做的任何修改都是一次性的——dyno重启后就会重置回初始镜像状态,所以装vim纯属白费功夫。
正确的环境区分方案
1. 本地开发环境:用.env文件管理变量
在你本地项目的根目录创建一个.env文件,写入区分环境的变量:
# .env 文件示例 ENVIRONMENT=development # 其他你需要的本地环境变量也可以加在这里
然后确保你的应用在本地启动时会加载这个文件(比如Node.js用dotenv包,Python用python-dotenv,不同语言对应不同的工具,这个你应该已经熟悉了)。
2. Heroku生产环境:直接用CLI设置变量
打开终端,用Heroku CLI命令直接给你的应用设置环境变量,根本不用进入bash:
# 设置生产环境标识变量 heroku config:set ENVIRONMENT=production -a <你的应用名称> # 可以随时查看已设置的所有环境变量,确认是否成功 heroku config -a <你的应用名称>
3. 在代码里判断环境
现在在你的应用代码里读取这个ENVIRONMENT变量,就能轻松区分是本地还是Heroku了:
举个Node.js的例子:
const currentEnv = process.env.ENVIRONMENT || 'development'; if (currentEnv === 'production') { console.log('当前运行在Heroku生产环境'); // 生产环境专属逻辑 } else { console.log('当前运行在本地开发环境'); // 开发环境专属逻辑 }
如果是Python项目:
import os current_env = os.getenv('ENVIRONMENT', 'development') if current_env == 'production': print('当前运行在Heroku生产环境') else: print('当前运行在本地开发环境')
补充说明
其实Heroku本身也会自动设置一些环境变量,比如DYNO变量——只要是在Heroku上运行的应用,这个变量都会存在,你也可以用它来判断:比如如果process.env.DYNO(Node.js)或者os.getenv('DYNO')(Python)存在,就说明是在Heroku生产环境。不过自己设置ENVIRONMENT变量会更清晰直观。
内容的提问来源于stack exchange,提问作者Sahand




