Heroku + Node:找不到模块错误
我的Node应用程序在本地运行良好,但在部署到Heroku时出现错误。 该应用程序在/models
文件夹中使用Sequelize,其中包含index.js
, Company.js
和Users.js
。 在本地,我可以使用/models/index.js
的以下代码导入模型:
// load models var models = [ 'Company', 'User' ]; models.forEach(function(model) { module.exports[model] = sequelize.import(__dirname + '/' + model); });
这工作正常,但是,当我部署到Heroku的应用程序崩溃与以下错误:
Error: Cannot find module '/app/models/Company' at Function.Module._resolveFilename (module.js:338:15) at Function.Module._load (module.js:280:25) at Module.require (module.js:364:17) at require (module.js:380:17) at module.exports.Sequelize.import (/app/node_modules/sequelize/lib/sequelize.js:219:24) at module.exports.sequelize (/app/models/index.js:60:43) at Array.forEach (native) at Object.<anonymous> (/app/models/index.js:59:8) at Module._compile (module.js:456:26) at Object.Module._extensions..js (module.js:474:10) Process exited with status 8
最初我以为这是由于区分大小写(本地mac vs heroku linux),但我搬了文件,做了一个git提交,然后再次提交,确保Company.js
在git存储库中大写。 这并没有解决问题,我不知道这个问题可能是什么。
问题是由于区分大小写和文件命名。 Mac OS X不区分大小写(但知道),而Heroku基于Linux并区分大小写。 通过从terminal运行heroku run bash
,我可以看到Heroku文件系统上的/models
文件夹是如何出现的。 解决方法是将我的本地系统上的User.js
和Company.js
重命名为新的临时文件,将更改提交到git,然后重命名为User.js
和Company.js
,注意首字母大写,然后提交更改再次通过混帐。 以前我试图直接从user.js
将文件重命名为User.js
和company.js
到Company.js
但git commit和区分大小写的文件名更改没有反映在Heroku上。
我看不到确切的修复,但你可以通过运行heroku run bash
login到一个Heroku实例,然后运行node
进入一个REPL,并尝试直接要求path来自己弄清楚。
- 在heroku上部署node.js应用程序成功,但不起作用
- 不能用Git Bash运行mongo / mongod,但运行在Git CMD(mongo:not found)
- 为Elastic Beanstalk上的github专用回购访问设置SSH密钥
- 有没有办法将package.json文件中的依赖项安装到不同的目录中?
- 基于package.json版本创build更改日志(NodeJS)
- github ssh公共密钥没有find与node.js child_process.spawn()在Windows上,但在child_process.exec()可见
- (git)将更改推送到开发服务器并使其自动重新启动Node应用程序的最佳方法?
- 如何链接到当地的Rust库? (类似于npm链接)
- Gulp将Node应用程序的dist文件夹部署到Heroku