Heroku + Node:找不到模块错误

sur*_*rth 37 javascript git heroku node.js sequelize.js

我的节点应用程序在本地运行正常,但在部署到Heroku时遇到错误.该应用程序使用Sequelize在一个/models文件夹,其中包含index.js,Company.jsUsers.js.在本地,我可以使用以下代码导入模型/models/index.js:

// load models
var models = [
  'Company',
  'User'
];
models.forEach(function(model) {
  module.exports[model] = sequelize.import(__dirname + '/' + model);
});
Run Code Online (Sandbox Code Playgroud)

这工作正常,但是,当我部署到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
Run Code Online (Sandbox Code Playgroud)

最初我认为这是由于区分大小写(本地mac与heroku linux),但我移动了文件,进行了git提交,然后又移回并再次提交以确保Company.js在git存储库中大写.这并没有解决问题,我不确定问题是什么.

sur*_*rth 82

问题是由于区分大小写和文件名称.Mac OS X不区分大小写(但知道),而Heroku基于Linux并且区分大小写.通过heroku run bash从我的终端运行,我能够看到/models文件夹在Heroku的文件系统上的显示方式.解决的办法是重新命名User.jsCompany.js我的本地系统到新的临时文件,更改提交到Git的,然后重命名回User.jsCompany.js被铭记大写首字母,然后通过混帐再次提交修改.以前我曾尝试直接重命名文件user.jsUser.jscompany.js,Company.js但git提交和区分大小写的文件名更改没有反映在Heroku上.

  • 您是个传奇人物。(自动生成的)package.json文件中使用“ server.js”而不是“ Server.js”存在此错误。 (3认同)
  • 我遇到了同样的问题,并且一直在努力解决这个问题。谢谢你,而不是@dankohn! (2认同)
  • 你救了我的命 (2认同)

Dan*_*ohn 23

我无法看到确切的修复,但您可以通过运行heroku run bash登录到Heroku实例来自行解决,然后运行node以输入REPL,并尝试直接请求路径.


Adr*_*oly 7

对我来说,这是由我不小心包含在 .gitignore 中的文件夹引起的!