2013-10-13 24 views
32

मेरा नोड ऐप स्थानीय रूप से ठीक चल रहा है, लेकिन हेरोोकू पर तैनाती करते समय एक त्रुटि में चला गया है। ऐप /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 

मैंने सोचा कि यह केस संवेदनशीलता (स्थानीय मैक बनाम हेरोकू लिनक्स) के कारण था, लेकिन मैंने फ़ाइल को स्थानांतरित कर दिया, एक गिट प्रतिबद्ध किया, और फिर Company.js को गिट रिपोजिटरी में कैपिटलकृत करने के लिए फिर से वापस ले जाया गया। इससे समस्या हल नहीं हुई और मुझे यकीन नहीं है कि समस्या क्या हो सकती है।

उत्तर

60

समस्या केस संवेदनशीलता और फ़ाइल नामांकन के कारण थी। मैक ओएस एक्स केस असंवेदनशील (लेकिन जागरूक) है जबकि हेरोकू लिनक्स पर आधारित है और केस संवेदनशील है। मेरे टर्मिनल से heroku run bash चलाकर, मैं देख सकता था कि /models फ़ोल्डर हेरोोकू फ़ाइल सिस्टम पर कैसे दिखाई देता है। समाधान को स्थानीय सिस्टम पर नई अस्थायी फ़ाइलों पर User.js और Company.js का नाम बदलना था, गिट में परिवर्तन करना, फिर User.js और Company.js पर पुनर्नामित करना पहले पूंजीकृत पहले अक्षर से सावधान रहना और फिर गिट के माध्यम से परिवर्तन करना। पहले मैंने फ़ाइलों को सीधे user.js से User.js और company.js से Company.js पर पुनर्नामित करने का प्रयास किया था, लेकिन गिट प्रतिबद्धता और केस-संवेदी फ़ाइल नाम परिवर्तन Heroku पर प्रतिबिंबित नहीं हुए थे।

+0

खुशी है कि मदद की, अच्छी नौकरी! – dankohn

+3

बहुत अच्छा जासूस काम। – WildService

+1

मुझे यह वही समस्या थी और यह सबसे लंबे समय तक इसे समझने की कोशिश कर रहा था। धन्यवाद और @ डंकोहन से! –

20

मुझे सटीक फ़िक्स नहीं दिख रहा है, लेकिन आप एक हेरोकू इंस्टेंस में लॉग इन करने के लिए heroku run bash चलाकर इसे स्वयं समझ सकते हैं, फिर एक REPL दर्ज करने के लिए node चलाएं, और सीधे पथ की आवश्यकता है।

+0

इस सहायक डिबगिंग टिप के लिए धन्यवाद जिसने मुझे इस मुद्दे को ठीक करने में सक्षम बनाया। – surfearth

+1

धन्यवाद, बहुत समय बचाया :) – tom

0

मेरे लिए, यह एक फ़ोल्डर के कारण हुआ था जिसे मैंने गलती से शामिल किया था .gitignore!

संबंधित मुद्दे