Heroku部署成功但无法运行:ORM钩子加载失败及生产模式切换问题
嘿,我来帮你搞定这两个部署问题!先从切换生产模式说起,再解决ORM钩子加载失败的bug。
一、切换到生产模式部署
切换生产模式其实很简单,有两种常用方式:
- 通过Heroku环境变量设置
打开终端运行这个命令:heroku config:set NODE_ENV=production,或者直接去Heroku后台的「Settings」页面,找到「Config Vars」添加键值对NODE_ENV=production。这样应用启动时就会自动切换到生产模式。 - 在启动命令里指定
如果你的项目里有Procfile,把原来的启动命令改成web: NODE_ENV=production sails lift,这样每次Heroku启动应用时都会强制用生产模式运行。
二、解决ORM钩子加载失败的问题
从日志看,应用在加载sails-mongo适配器后触发了ORM钩子失败,本地正常但线上出问题,大概率是生产环境的依赖或配置问题,给你几个排查方向:
- 确认
sails-mongo在生产依赖里
本地开发时如果用npm install sails-mongo --save-dev安装,Heroku部署时会跳过dev依赖,导致适配器找不到。赶紧运行npm install sails-mongo --save把它移到dependencies里,然后提交更新后的package.json到Git,重新部署试试。 - 检查生产环境的数据库配置
Sails在生产模式下会读取config/env/production.js的配置,而不是本地的development.js。要确保这里的MongoDB连接配置是对的:
比如用Heroku的MongoDB插件(比如mLab)提供的环境变量,配置示例如下:module.exports = { models: { connection: 'mongoProduction', migrate: 'safe' // 生产环境一定要用safe,避免误操作数据 }, connections: { mongoProduction: { adapter: 'sails-mongo', url: process.env.MONGODB_URI // 直接用Heroku提供的环境变量,不用硬写地址 } } }; - 验证MongoDB服务是否正常
如果你用了Heroku的MongoDB插件,先确认插件已经正确安装,并且环境变量MONGODB_URI存在。可以运行heroku config命令查看所有环境变量,确认这个变量有没有值。 - 查看完整错误日志
你提供的日志只显示了钩子失败,没给具体原因。运行heroku logs --tail可以实时查看完整的错误栈,比如是不是连接超时、认证失败这些具体问题,找到根源就好解决了。
内容的提问来源于stack exchange,提问作者user3165372
相关产品推荐
相关产品推荐

