首页 > 解决方案 > 尽管将 config var 设置为“staging”(NestJS 应用程序),Heroku NODE_ENV 始终是“开发”

问题描述

在我部署 NestJS 应用程序的 Heroku 环境中,我通过 Heroku UI 设置了所有的 Config Vars。我已将我的NODE_ENV配置变量设置为staging使用 Heroku UI。我什至运行过这个命令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文件,它实际上不应该被使用。

有谁知道为什么会这样?

标签: herokuconfignestjstypeormdotenv

解决方案


我发现这不是 Heroku 的问题。相反,这是一个 NestJS/Nx 问题。

请参阅: 使用 nrwl nx 构建 nestjs 应用程序时,process.env.NODE_ENV 总是“开发”


推荐阅读