2013-10-13 4 views
32

내 노드 응용 프로그램은 로컬에서 정상적으로 작동하지만 Heroku에 배포 할 때 오류가 발생했습니다. 앱은 /models 폴더에 Sequelize를 사용합니다.이 폴더에는 index.js, Company.jsUsers.js이 포함되어 있습니다. 로컬, 나는 /models/index.js에 다음 코드를 사용하여 모델을 가져올 수 있어요 : 처음Heroku + Node : 모듈 오류를 찾을 수 없습니다.

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 

: 나는 다음과 같은 오류와 Heroku가 앱 충돌을 배포 할 때

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

이것은, 그러나, 잘 작동 나는 대소 문자를 구분 (로컬 Mac 대 heroku 리눅스)로 인한 줄 알았지 만 파일을 이동하고 자식 커밋을 만든 다음 다시 이동하고 Company.js이 git 저장소에 대문자로되어 있는지 다시 확인했습니다. 이것은 문제를 해결하지 못했고 그 문제가 무엇인지 모릅니다.

답변

60

이 문제는 대/소문자 구분 및 파일 이름 지정으로 인한 것입니다. Mac OS X은 대소 문자를 구분하지 않지만 (인식하지만) Heroku는 Linux를 기반으로하며 대소 문자를 구분합니다. 내 터미널에서 heroku run bash을 실행하면 /models 폴더가 Heroku의 파일 시스템에 어떻게 나타나는지 볼 수있었습니다. 해결 방법은 내 로컬 시스템의 User.jsCompany.js의 새 임시 파일 이름을 변경하고 git에 변경 사항을 커밋 한 다음 User.jsCompany.js으로 대문자로 된 첫 글자를 염두에두고 git을 통해 변경 사항을 다시 커밋해야합니다. 이전에는 user.js에서 User.jscompany.js에서 Company.js으로 파일의 이름을 직접 변경하려고했지만 git commit 및 대소 문자가 중요한 파일 이름 변경 사항은 Heroku에 반영되지 않았습니다.

+0

기쁜 마음으로 도움을주었습니다. – dankohn

+3

지독한 형사. – WildService

+1

나는이 같은 문제가 있었고 가장 오랜 시간 동안 그것을 알아 내려고 노력했다. @ 단코보다 감사합니다! –

20

정확한 수정 사항을 볼 수 없지만 heroku run bash을 실행하여 Heroku 인스턴스에 로그인 한 다음 node을 실행하여 REPL을 입력하고 직접 경로를 요구하십시오.

+0

문제를 해결할 수있는 유용한 디버깅 팁을 보내 주셔서 감사합니다. – surfearth

+1

덕분에 많은 시간을 절약 할 수있었습니다 :) – tom

0

나를 위해, 그것은 내가 실수로 .gitignore에 포함시킨 폴더 때문에 발생했습니다!

관련 문제