53

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 と heroku linux)、ファイルを移動して git コミットを行い、元に戻して再度コミットCompany.jsし、git リポジトリで大文字が使用されるようにしました。これで問題は解決しませんでした。何が問題なのかわかりません。

4

7 に答える 7

124

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

于 2013-10-13T17:22:08.573 に答える
34

正確な修正方法はわかりませんが、実行heroku run bashして Heroku インスタンスにログインし、次に実行nodeして REPL に入り、パスを直接要求することで解決できます。

于 2013-10-13T11:07:08.120 に答える