【发布时间】:2021-10-07 10:58:50
【问题描述】:
在我部署 NestJS 应用程序的 Heroku 环境中,我通过 Heroku UI 设置所有配置变量。我已使用 Heroku UI 将我的 NODE_ENV 配置变量设置为 staging。我什至运行过这个命令heroku config:set NODE_ENV=staging -a <my-staging-environment。当我运行heroku config -a <my-staging-environment> 时,我看到NODE_ENV 设置为staging,但无论出于何种原因,当我从我的代码中控制台记录这个变量时,它会输出development。下面是一些示例代码,它在我的 TypeOrm 配置中将 development 记录为 NODE_ENV 的值。这导致ssl 属性没有设置为正确的值,因此我无法连接到我的 Heroku Postgres 数据库。我只打算将其设置为 development 用于本地开发目的。
require('dotenv').config();
console.log(process.env.NODE_ENV); // outputs "development" - idk where this value is coming from
console.log(process.env.DATABASE_URL); // outputs the correct value that I set in Heroku Config Vars
const typeOrmConfig: TypeOrmModuleOptions = {
type: 'postgres',
url: process.env.DATABASE_URL,
ssl: process.env.NODE_ENV !== 'development' ? { rejectUnauthorized: false } : false, // ternary evaluates to the wrong value
// ... other config options
};
我使用dotenv,并确保.gitignore 我的.env 文件。我不记得曾经将此变量设置为development。我在代码中看到它设置为NODE_ENV=development 的唯一位置是在我的.env-example 文件中。我确实将此文件提交到源代码管理,但它只是一个示例文件,而不是真正的 .env 文件,它实际上不应该被使用。
有人知道为什么会这样吗?
【问题讨论】:
标签: heroku config nestjs typeorm dotenv