2012-12-03 20 views
10

मेरी आतंक विरोधी एप्लिकेशन विकास मशीन पर कुछ अजीब हवा से बाहर प्रकट करने के लिए शुरू कर दिया (स्थानीय सर्वर, OSX 10.8.1, रूबी 1.9.3, 3.2.8 रेल) ​​(के पाठ्यक्रम ...):सिस्टमस्टैक त्रुटि सर्वर चल रहा है, जबकि फ़ाइलों को बदलकर ट्रिगर?

रेल सर्वर गिर (सभी मार्गों मारे गए हैं, सर्वर को पुनः आरंभ करने का एकमात्र तरीका यह पुन: चालू करने के लिए है) के बाद लॉग प्रविष्टियों के साथ:

SystemStackError (stack level too deep): 
    actionpack (3.2.8) lib/action_dispatch/middleware/reloader.rb:70 


    Rendered /Users/dekay/.rvm/gems/[email protected]/gems/actionpack-3.2.8/lib/action_dispatch/middleware/templates/rescues/_trace.erb (1.9ms) 
    Rendered /Users/dekay/.rvm/gems/[email protected]/gems/actionpack-3.2.8/lib/action_dispatch/middleware/templates/rescues/_request_and_response.erb (1.2ms) 
    Rendered /Users/dekay/.rvm/gems/[email protected]/gems/actionpack-3.2.8/lib/action_dispatch/middleware/templates/rescues/diagnostics.erb within rescues/layout (14.7ms) 

मैं googled और पाया गया कि SystemStackError एक अंतहीन लूप के कारण आमतौर पर है है, लेकिन जहाँ तक क्योंकि मैं इसका पता लगा सकता हूं मेरे पास मेरे कोड में ऐसा कोई लूप नहीं है। और त्रुटि अनुप्रयोग तर्क के एक निश्चित चरण में प्रतीत नहीं होती है।

सर्वर क्रैश और अपने कार्यों के बीच केवल सहसंबंध इस प्रकार है:

  1. बदलें एप्लिकेशन
  2. एप्लिकेशन पुनः लोड करें
  3. बूम, सर्वर चला, त्रुटि संदेश की वर्तमान वेब पेज में कुछ कोड ।
  4. कोई पृष्ठ इस के बाद काम, त्रुटि है:

    रूटिंग त्रुटि

    कोई मार्ग मैचों [प्राप्त] "/"

    उपलब्ध मार्गों पर अधिक जानकारी के लिए रेक मार्गों चलाने की कोशिश करें।

क्या कोई मुझे इसे डीबग करने के लिए सही दिशा में इंगित कर सकता है? पीएस: मुझे संदेह है कि यह एक लापरवाह "बंडल अपडेट" के बाद हुआ था। क्या यह हो सकता है?

+0

आप किस रत्न का उपयोग कर रहे हैं? क्या आप ActiveSupport/ActiveDispatch/आदि में कुछ भी बंद कर रहे हैं? रूबी का क्या पैच संस्करण आप उपयोग कर रहे हैं? – Novae

+0

मैं इसे रेल 3.2.11 और रूबी 1.9.3-पी 385 पर देख रहा हूं। Gemenv: https://gist.github.com/coneybeare/4957822 Gemfile.lock: https://gist.github.com/coneybeare/4957828 – coneybeare

उत्तर

2

rails app में त्रुटि संदेश को डिबग करना आसान नहीं है, क्योंकि त्रुटि कई कारणों से हो सकती है, और त्रुटि संदेश बहुत उपयोगी नहीं है।

कारणों एक stack level too deep error के लिए अग्रणी में से कुछ:

  1. आवेदन की gems & plugins and any other dependencies में असंगति।
  2. Code syntax error
  3. applying db migrations erroneously के कारण असंगतता।

तो त्रुटि प्रणाली बूट अप पर हो रहा था, तो इस टिप बहुत उपयोगी हो जाएगा: http://www.datatravels.com/technotes/2012/07/11/awesome-debugging-for-rails-boot-stacklevel-too-de/

वर्णन से, ऐसा लगता है जैसे एप्लिकेशन थोड़ी देर के लिए ठीक काम करता है, और फिर दुर्घटनाग्रस्त शुरू होता लग रहा है - तो उपर्युक्त बूट अप केस लागू नहीं हो सकता है।

एक तरह से समस्या के बारे में पता लगाना जाना, यह परिवर्तन वापस किए और सिस्टम स्थिति काम करने के लिए वापस पाने सार्थक हो सकता है printf debugging

इसके अलावा का उपयोग करके विशिष्ट line/block of code कि जिसके कारण त्रुटि को अलग करने के लिए होगा और फिर रूट कारण को अलग करने के लिए वृद्धिशील रूप से परिवर्तनों को वापस रखें।

यह संभावना है कि bundle update ने इस मामले में त्रुटि को ट्रिगर किया था; तो नए जोड़े गए निर्भरताओं की जांच करना और यह देखना अच्छा होगा कि वे अपराधी हो सकते हैं या नहीं।

+0

इस उत्तर के लिए धन्यवाद। वास्तव में अजीब बात यह है कि यह रीलोडर में हैपने लगता है, जब मैं स्थानीय रूप से फ़ाइल बदलता हूं तो सर्वर उसे प्राप्त नहीं करता है और क्रैश लगता है। जब मैं उसकेोकू में तैनात करता हूं तो यह बिल्कुल नहीं होता है। – danieldekay

+1

हेरोकू तैनाती सर्वरों के पुनरारंभ को मजबूर करता है; इसलिए शायद यह आश्चर्य की बात नहीं है कि त्रुटि वहां नहीं होती है। क्या स्थानीय ऐप पुनरारंभ करने के बाद ठीक काम करना जारी रखता है? या यह थोड़ी देर के बाद एक ही त्रुटि के साथ विफल होने के लिए वापस आ जाता है? –

+0

स्थानीय ऐप ठीक चलाता है अगर मैं "चल रहे सिस्टम के तहत" किसी भी फाइल को नहीं बदलता। ऐप चल रहा था, जबकि फ़ाइलों को बदलने के लिए यह सुरक्षित था, मुझे नई चीज पाने के लिए बस वेब पेज को फिर से लोड करना पड़ा। – danieldekay