2009-02-24 18 views
5

हर बार जब मैं का उपयोग कर 2.2 एप्लिकेशन की lib निर्देशिका मेरी रेल से किसी भी वर्ग चलाने का प्रयास" स्क्रिप्ट/धावक -e उत्पादन ClassName.run "मैं निम्नलिखित त्रुटि मिलती है:`const_missing ': अप्रारंभीकृत निरंतर (NameError)

/usr/lib/ruby/gems/1.8/gems/rails-2.2.2/lib/commands/runner.rb:47: 
/usr/lib/ruby/gems/1.8/gems/activesupport-2.2.2/lib/active_support/dependencies.rb:89:in `const_missing': uninitialized constant ClassName (NameError)" 

किसी कारण से मुझे यह त्रुटि नहीं मिलती है जब मैं इसे production के बजाय test के रूप में चलाता हूं, और सब कुछ ठीक काम करता है।

हे हाँ run एक वर्ग विधि अर्थात def self.run .... end

कोई सुझाव है?

उत्तर

10

वह त्रुटि तब होती है जब रूबी कक्षा या मॉड्यूल नहीं ढूंढ पाती है। मैं द्वारा बाहर शुरू करेंगे:

  1. जाँच हो रही है मणि निर्भरता (वे सब वातावरण के लिए ही कर रहे हैं?)
  2. कुछ भी है कि className, विशेष रूप से मॉड्यूल, वर्ग और प्लग इन को परिभाषित करता है के लिए खोज अपने कोड।
  3. देव में अपने प्रत्येक प्लगइन को अक्षम करें, क्या कोई प्लगइन अचानक उस त्रुटि का कारण बनता है?
  4. यदि कोड किसी lib में है, तो lib को उत्पादन में लोड होने के लिए मजबूर करने के लिए अपने उत्पादन.आरबी को कथन की आवश्यकता है।

आशा है कि मदद करता है।

:

अद्यतन बस संक्षेप में प्रस्तुत करने की टिप्पणियां यह विकल्प 4.

जब तक आप केवल उत्पादन आप सुनिश्चित करें कि सभी वातावरण निम्न में से कोई एक करके lib लोड करने के बारे में सोचना चाहिए में lib लोड करना चाहते था की आवश्यकता होती है में यह

  • पथ lib करने के लिए config/environment.rb में सक्षम करने और config.load_paths चर संशोधित करके जोड़े
    1. के साथ एक रेल प्रारंभकर्ता (config/initializers के तहत एक .rb फ़ाइल) बनाएँ।
  • +0

    काम करता है। प्रश्न में लापता वर्ग वह है जिसे मैंने lib में परिभाषित किया है। फ़ाइल नाम पर वर्गनाम से मिलान करने जैसी सरल सामग्री भी जांचती है; संक्षेप में यह परिभाषित किया गया है। मुझे नहीं पता कि मैं क्या खो रहा हूं क्योंकि यह देव पर बहुत अच्छा चलता है और परीक्षण केवल उत्पादन नहीं – chaostheory

    +0

    आह, यह दिलचस्प है ... उत्पादन में जाने के बारे में ठीक एक बात यह है कि चीजों को शुरू किया जाता है और देव के विभिन्न तरीकों से कैश किया जाता है और परीक्षा। मुक्ति कहाँ से बुलाया जाता है? विशेष रूप से देखें कि उत्पादन में lib की आवश्यकता है या नहीं। समस्या हल करती है। – robertpostill

    +0

    मैं इसे सिर्फ अपने ऐप की जड़ से बुलाता हूं ... मैं आज रात का परीक्षण करने के लिए इंतजार नहीं कर सकता; ओएमजी अगर यह है तो यह शानदार होगा – chaostheory

    1

    मेरे पास एक ही फ़ाइल पर एकाधिक श्रेणी परिभाषा (सभी एसटीआई कक्षाएं) थीं। और जब मैंने परिभाषा को अपनी संबंधित फाइलों में विभाजित किया, तो यह

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