You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Sails使用NODE_ENV=production启动失效 但NODE_ENV=prod运行正常

问题产生的常见原因
  • 项目配置加载逻辑未兼容全写环境标识:多数自研Node脚手架、轻量web框架的配置加载模块,默认仅识别dev/test/prod三个简写环境值,未兼容全写的production。当传入NODE_ENV=production时,配置加载模块无法匹配到对应的配置文件,会 fallback 到默认的本地开发配置,其中的本地数据库、缓存、服务地址在线上环境无法访问,导致服务启动阻塞超时。
  • 代码中存在production环境的专属异常逻辑:项目代码中可能存在针对NODE_ENV === 'production'的专属判断分支,比如启动远程埋点上报、预拉取全量静态资源、强制对接内部运维平台等逻辑,这类逻辑如果配置缺失、网络不通就会卡住启动流程,而prod不会命中该分支,自然不会触发异常。
  • PM2残留进程缓存了错误配置:如果你之前使用PM2启动过同名服务,且遗留了错误的环境变量、启动参数缓存,即使本次命令传入了正确的NODE_ENV=production,PM2也可能优先读取旧的错误配置,导致启动失败。改为prod属于全新的环境变量值,无缓存冲突,所以可以正常启动。
  • production.js配置文件本身存在错误:如果重命名操作不是纯改文件名,而是新建了prod.js填写配置,可能原production.js存在必填配置缺失、密钥格式错误、地址拼写错误等问题,导致加载配置时抛出未捕获的异常,阻塞启动。
问题验证方案
  • 绕过PM2直接启动服务:在项目根目录执行NODE_ENV=production node app.js,查看控制台输出的报错信息,可直接定位是配置加载失败、还是业务逻辑异常导致的超时。
  • 检查配置加载逻辑:找到项目中负责加载环境配置的代码(通常在config/index.js或根目录启动脚本中),搜索process.env.NODE_ENV相关的匹配规则,确认是否仅匹配了prod未兼容production。
  • 清除PM2缓存后重试:执行pm2 delete all清除所有残留进程和缓存配置,再重新执行NODE_ENV=production pm2 start app.js,如果可以正常启动则确定是PM2缓存问题。

内容的提问来源于stack exchange,提问作者Dhairya Verma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 04:21:03