私の Node アプリはローカルでは正常に動作していますが、Heroku にデプロイするときにエラーが発生しました。アプリは、、およびを含むフォルダーで Sequelize を使用します。ローカル/models
では、 で次のコードを使用してモデルをインポートできます。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 と Heroku Linux) が原因だと思いましたが、ファイルを移動して Git コミットを行い、その後元に戻して再度コミットし、Company.js
Git リポジトリで大文字になっていることを確認しました。これで問題は解決せず、何が問題なのかわかりません。
ベストアンサー1
問題は、大文字と小文字の区別とファイル名が原因でした。Mac OS X は大文字と小文字を区別しません (ただし認識します)。一方、Heroku は Linux ベースで、大文字と小文字を区別します。heroku run bash
ターミナルから実行することで、フォルダーが Heroku のファイル システムでどのように表示されるかを確認できました/models
。解決策は、ローカル システムでUser.js
と をCompany.js
新しい一時ファイルに名前変更し、変更を git にコミットしてから、最初の文字が大文字であることに注意しUser.js
ながらに名前を戻して、git 経由で変更を再度コミットすることでした。以前は、ファイル名を からおよびにCompany.js
直接変更しようとしましたが、git コミットと大文字と小文字を区別するファイル名の変更は Heroku に反映されませんでした。user.js
User.js
company.js
Company.js