2011-10-03 21 views
5

मेरे पास रेल 2.3 का उपयोग कर रूबी में लिखा गया एक आवेदन है। हम ActiveRecord का उपयोग करते हैं।यह निर्धारित करने के लिए कि रूबी-ऑन-रेल कोड कुछ एसक्यूएल उत्पन्न करता है?

कभी-कभी, ActiveRecord कुछ बहुत ही भयानक अक्षम SQL उत्पन्न करता है। हम यह निर्धारित कर सकते हैं कि एसक्यूएल धीमी क्वेरी लॉग का उपयोग करके समस्याग्रस्त है और new relic का उपयोग कर रहा है। हालांकि, समस्याग्रस्त एसक्यूएल उत्पन्न करने वाले हमारे सॉफ़्टवेयर में कोड की रेखा निर्धारित करना वास्तव में मुश्किल हो सकता है। यह आम तौर पर एसोसिएशन और नाम_स्कोप का उपयोग करके बनाई गई एक क्वेरी है।

जो मुझे वास्तव में पसंद है वह हमारे लॉग फाइलों में एसक्यूएल को के साथ कोड के साथ टैग करने के लिए कुछ तरीका है जो इसे उत्पन्न करता है (क्वेरी सक्रिय करने वाले ActiveRecord की रेखा नहीं)।

जानकारी कॉलर सरणी के माध्यम से उपलब्ध होना चाहिए। मैं पूरी सरणी को डंप नहीं करना चाहता, मैं सिर्फ हमारे कोड का फ़ाइल नाम और लाइन चाहता हूं जो सबसे अधिक जिम्मेदार है। क्या कोई मणि है जो पहले से ही करता है? यदि नहीं, तो कोई सुझाव?

+1

एक सहकर्मी ने सुझाव दिया कि हम नियमित रूप से नियमित उत्पादन लॉग फ़ाइल में डालने के बजाय, एसक्यूएल में एक फ़ाइल के रूप में फ़ाइल नाम और लाइन नंबर (एक बार जब हम निर्धारित करते हैं) डालते हैं। इस तरह, धीमी क्वेरी लॉग में यह जानकारी भी होगी। – ChrisInEdmonton

उत्तर

4

आप active-record-query-trace मणि के साथ कुछ प्रेरणा मिल चाहिए

संपादित करें: wooops, यह बहुत तेजी से पढ़ते हैं, इस आतंक विरोधी 3+ के लिए है। >This< seems to work for rails 2.3। आपको कुछ प्रेरणा here भी मिल सकती है।

+0

शानदार! रेल 3 मणि के संदर्भ के लिए धन्यवाद। यह अजीब बात है कि यह अधिक लोग नहीं हैं जिन्हें इसकी आवश्यकता है ... –

0

नया अवशेष आपको Slow SQL और लेनदेन निशान सुविधाओं के साथ व्यक्तिगत धीमे एसक्यूएल प्रश्नों के लिए पूर्ण स्टैक निशान देगा।

1

rack-mini-profiler में रूबी कोड की कौन सी लाइन जेनरेट की गई है, इस बारे में जानकारी शामिल है।

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