[解決済み] Heroku + Node: Cannot find module エラー
質問
私の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 commit し、さらに移動して再度 commit することで、確実に
Company.js
は、git リポジトリでは大文字になります。これは問題を解決しなかったので、何が問題なのかよくわかりません。
解決方法は?
問題は、大文字と小文字の区別とファイル名の命名に起因していました。Mac OS Xは大文字と小文字を区別しませんが、HerokuはLinuxをベースにしているので大文字と小文字を区別します。そこで
heroku run bash
をターミナルから確認することができました。
/models
フォルダが Heroku のファイルシステム上に表示されました。解決策は
User.js
と
Company.js
を新しい一時ファイルにコピーし、変更を git にコミットした後、リネームして
User.js
と
Company.js
最初の文字が大文字になるように気をつけながら、gitで再度変更をコミットしてください。以前は、ファイル名を直接
user.js
から
User.js
と
company.js
から
Company.js
が、git commit と大文字小文字を区別したファイル名の変更が Heroku に反映されませんでした。
関連
-
[解決済み] Uncaught TypeError: 未定義のプロパティ 'top' を読み込めない
-
[解決済み】jquery $.ajaxオブジェクトのresponseJSONプロパティを取得する方法 [重複]。
-
[解決済み】「Uncaught TypeError: Chromeで "Illegal invocation "が発生する。
-
[解決済み】ある要素が可視DOMに存在するかどうかを確認するにはどうすればいいですか?
-
[解決済み】React、Uncaught ReferenceError。ReactDOMは定義されていません
-
[解決済み】XMLパースエラー:ルート要素が見つからない コンソールの場所 FF
-
[解決済み】モジュール 'internal/util/types' が見つかりません。
-
[解決済み] ReferenceError: describe は定義されていません NodeJs
-
[解決済み] Git リポジトリで削除されたファイルを検索して復元する方法
-
[解決済み] インストールされているnpmパッケージのバージョンを検索する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】TypeError: 'undefined'はオブジェクトではありません。
-
[解決済み】Uncaught ReferenceError: angular is not defined - AngularJSが動作しない。
-
[解決済み】JavaScriptのgetElementByNameが機能しない
-
[解決済み】JavaScriptのinnerHTMLで要素が更新されない
-
[解決済み】最大呼び出しスタックサイズ超過エラーとその修正方法とは?
-
[解決済み】ある要素が可視DOMに存在するかどうかを確認するにはどうすればいいですか?
-
[解決済み】別のjsファイル内でJavaScriptの関数を呼び出す
-
[解決済み】Babel NodeJS ES6: SyntaxError: 予期しないトークンのエクスポート
-
[解決済み】TypeError:res.jsonは関数ではありません。
-
[解決済み] [Solved] Uncaught Invariant Violation: 前のレンダリング中よりも多くのフックをレンダリングする