2012-09-27 12 views
6

क्या रेलवे विकास लॉग में कोड की कौन सी रेखा एक MySQL कथन उत्पन्न करने का कोई तरीका है?एसक्यूएल क्वेरी से आवेदन कोड में बैकट्रैक?

कुछ प्रदर्शन अनुकूलन करने के लिए, मैं यह जानना चाहता हूं कि मेरे ऐप का कौन सा हिस्सा MySQL क्वेरी बना रहा है। जब मैं अपने लॉग को देखता हूं, तो मुझे लगता है कि मैं प्रत्येक वेब अनुरोध पर चारों ओर पूछताछ के बारे में पूछताछ करता हूं, और मुझे यह पता लगाना होगा कि वे कहां से आए हैं।

मैं लॉग आउटपुट में ____FILE____ और ____LINE____ जैसे कुछ चर जोड़ने के बारे में सोच रहा हूं।

क्या यह संभव है?

उत्तर

4

https://github.com/lightyear/sql-logging आपको प्रत्येक SQL क्वेरी और उपयोगी आंकड़ों का एक समूह के लिए एक बैकट्रैक देता है।

+0

क्या आप जानते हैं कि रेलवे 2.x के लिए प्लगइन कहां प्राप्त करें, उनकी वेबसाइट पर नामित svn repo नीचे प्रतीत होता है। –

+0

हम रेल 2 के लिए query_trace का उपयोग करते हैं। Https://github.com/ntalbott/query_trace –

+0

ने ऐसा किया !!!! धन्यवाद! –

1

आपके पास कुछ विकल्प हैं। इन विकल्पों में से कोई भी आपको बिल्कुल बैकट्रैक नहीं देगा जैसा कि आप रूबी को त्रुटियों पर बैकट्रैक प्राप्त करते हैं, लेकिन वे आपको टूल और जानकारी देंगे जो आपको ट्रैक करने के लिए आवश्यक हैं जहां से आपके SQL प्रश्न आ रहे हैं।

  1. आपका ठेठ रेल लॉग प्रविष्टि कुछ इस तरह दिखेगा:

    Started GET "/login" for 127.0.0.1 at Thu Sep 27 18:59:08 -0500 2012 
        Processing by PublicController#index as HTML 
        (40.9ms) SELECT COUNT(*) FROM "studies" 
        (49.6ms) SELECT COUNT(DISTINCT "activities"."whodiddit") FROM "activities" 
        (35.3ms) SELECT COUNT(*) FROM "involvements" 
    

    मेरा अनुमान है कि यह वह जगह है जहाँ एसक्यूएल प्रश्नों के अपने सैकड़ों हो रही हैं?

    Rendered partials/_faq.haml (6.1ms) 
    Rendered public/index.html.haml within layouts/public (114.3ms) 
    Completed 200 OK in 595ms (Views: 276.7ms | ActiveRecord: 151.6ms) 
    

    तो, शीर्ष पर आप HTTP क्रिया GET और मार्ग (मेरे उदाहरण में /login), और मेजबान जिसमें से यह आया था मिल गया है। उसके बाद रेल आपको बताता है कि कौन सा नियंत्रक + कार्रवाई ट्रिगर हो जाती है।

    नोट: यदि आपको Rendered... से शुरू होने वाली एक पंक्ति दिखाई देती है तो आपका विचार प्रस्तुत किया जा रहा है। कोई भी SQL क्वेरी जो प्रस्तुत करने के बाद आती है इंगित करती है कि SQL व्यू आपके दृश्य में ट्रिगर किए जा रहे हैं (उदा। आपके नियंत्रक के बाहर)। इसके बारे में सोचने के लिए बस एक छोटी सी चीज। आपके व्यू को कौन सा कोड कॉल कर रहा है, इस पर निर्भर करता है कि आपके एसक्यूएल प्रश्नों को ट्रिगर करने वाली वास्तविक लाइनों को हेल्पर्स, मॉडल या कहीं और व्यू कोड कॉल करने के लिए दफनाया जा सकता है।

    Processing by PublicController#index as HTML 
    

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

    तो, क्या यह आपको बताता है, मूल रूप से, कि SQL प्रश्नों ट्रिगर किया गया है या तो PublicController, या विचारों कि कि नियंत्रक renders के रूप में इस कार्रवाई का एक परिणाम के ट्रिगर हो रहा से एक में index कार्रवाई के हिस्से के रूप।

  2. यदि पार्स के लिए बहुत अधिक है, तो आप विभिन्न बिंदुओं पर आउटपुट को रोकने के लिए debugger आदेशों का उपयोग करते हैं, और आपको यह जांचने की अनुमति देते हैं कि क्या हो रहा है। debugger here पर और अधिक।

  3. आप अपने एप लॉग में सीधे चीजों को आउटपुट करने के लिए Rails.logger.info "My info message" या Rails.logger.error "My error message" (डिफ़ॉल्ट या त्रुटि लॉग इत्यादि के आधार पर) के आधार पर इसका उपयोग कर सकते हैं।

+0

"आपके एसक्यूएल प्रश्नों को ट्रिगर करने वाली वास्तविक लाइनें मददगार, मॉडल, या कहीं भी व्यू कोड कॉल करने के लिए दफन की जा सकती हैं।" क्या im कि खोजने के लिए बाहर क्या मॉड्यूल या श्रेणी का निर्माण लॉग का वह हिस्सा है से? जहाँ से मॉडल ओडर सहायक आदि .. वास्तव में ... क्या यह संभव है, बाहर है खोजने की कोशिश? (40.9 एमएमएस) "अध्ययन" से COUNT (*) चुनें " (49.6ms) चुनें COUNT (DISTINCT" गतिविधियां "।" Whodiddit ")" गतिविधियों "से (35.3ms) चुनें" (")" भागीदारी "से –

+0

आप कुछ कोड और अपने लॉग के कुछ हिस्सों को पोस्ट करते हैं? जहां से SQL क्वेरी आ रही हैं, नीचे दिए गए कोड को देखकर बहुत मुश्किल नहीं है, लेकिन मुझे आपको कुछ वास्तविक कोड, या कम से कम संबंधित लॉग पोस्ट करने की आवश्यकता है। मैं आपके वर्तमान प्रश्न के साथ क्या कर सकता हूं, आपको सामान्य सलाह देना है क्योंकि आपका प्रश्न ठीक है प्रकृति में जे जेनेरिक। – jefflunt

+0

मैंने पोस्ट किए गए लॉग से, मैं आपको बता सकता हूं कि एसक्यूएल नियंत्रक (या इसे कॉल करने वाली विधियों में से एक) में हो रहा है, और दृश्य नहीं, क्योंकि केवल लॉग लाइन से पहले एसक्यूएल लॉग हो जाता है जहां दृश्य प्रस्तुत किया जाता है। यह पता लगाना कि ज्यादातर रेल कॉल के प्रवाह को समझने के बारे में है। एक अनुरोध यह आता है, यह एक नियंत्रक कार्रवाई के लिए भेजा जाता है, एक्शन कोड चलाया जाता है, विचार प्रस्तुत किए जाते हैं (जिसका अर्थ है दृश्य में दृश्य और एम्बेडेड कोड निष्पादित किया जाता है), और यह बहुत अधिक है। लॉग जब क्रियान्वित हो जाता है तो कालक्रम के क्रम में होता है। – jefflunt

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