Heroku + Node:找不到模块错误

我的Node应用程序在本地运行良好,但在部署到Heroku时出现错误。 该应用程序在/models文件夹中使用Sequelize,其中包含index.jsCompany.jsUsers.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.jsCompany.js重命名为新的临时文件,将更改提交到git,然后重命名为User.jsCompany.js ,注意首字母大写,然后提交更改再次通过混帐。 以前我试图直接从user.js将文件重命名为User.jscompany.jsCompany.js但git commit和区分大小写的文件名更改没有反映在Heroku上。

我看不到确切的修复,但你可以通过运行heroku run bashlogin到一个Heroku实例,然后运行node进入一个REPL,并尝试直接要求path来自己弄清楚。