2013-10-13 7 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 vs heroku linux)によると思ったが、私はファイルを移動し、git commitを行った後、再度移動して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を実行してパスを直接要求してみてください。

+0

この問題を解決するための役立つデバッグのヒントをいただきありがとうございます。 – surfearth

+1

おかげで、多くの時間を節約できました:) – tom

0

私にとっては、誤って.gitignoreに含まれていたフォルダが原因でした。