Heroku + Node: モジュールエラーが見つかりません 質問する

Heroku + Node: モジュールエラーが見つかりません 質問する

私の Node アプリはローカルでは正常に動作していますが、Heroku にデプロイするときにエラーが発生しました。アプリは、、およびを含むフォルダーで Sequelize を使用します。ローカル/modelsでは、 で次のコードを使用してモデルをインポートできます。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 と Heroku Linux) が原因だと思いましたが、ファイルを移動して Git コミットを行い、その後元に戻して再度コミットし、Company.jsGit リポジトリで大文字になっていることを確認しました。これで問題は解決せず、何が問題なのかわかりません。

ベストアンサー1

問題は、大文字と小文字の区別とファイル名が原因でした。Mac OS X は大文字と小文字を区別しません (ただし認識します)。一方、Heroku は Linux ベースで、大文字と小文字を区別します。heroku run bashターミナルから実行することで、フォルダーが Heroku のファイル システムでどのように表示されるかを確認できました/models。解決策は、ローカル システムでUser.jsと をCompany.js新しい一時ファイルに名前変更し、変更を git にコミットしてから、最初の文字が大文字であることに注意しUser.jsながらに名前を戻して、git 経由で変更を再度コミットすることでした。以前は、ファイル名を からおよびにCompany.js直接変更しようとしましたが、git コミットと大文字と小文字を区別するファイル名の変更は Heroku に反映されませんでした。user.jsUser.jscompany.jsCompany.js

おすすめ記事