You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在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

火山引擎 最新活动