15

मेरे पास कुछ नियंत्रक और कुछ रेक कार्यों के साथ एक साधारण रेल एप्लिकेशन है। क्रोन द्वारा whenever gem के साथ कॉन्फ़िगर किए गए कुछ कार्यों को निष्पादित किया जाता है।रेक कार्यों में रेल अपवाद नोटिफ़ायर

मेरे काम में से एक दैनिक निष्पादित किया जाता है और कुछ समय यह एक अपवाद को जन्म देती है और डिफ़ॉल्ट रूप से मैं क्रॉन द्वारा इस चेतावनी प्राप्त

rake aborted! 
undefined method `parameterize' for nil:NilClass 

Tasks: TOP => mailboxes:clean_processed 
(See full trace by running task with --trace) 

मैं डिबग करने के लिए क्या हो रहा है और इस कारण के लिए मैं सिर्फ इस exception notification स्थापित किया है चाहता हूँ मेरी Gemfile

gem "exception_notification", "~> 2.4.1", :require => 'exception_notifier' 

में इस लाइन के साथ मणि और

के साथ मेरी application.rb फ़ाइल में कॉन्फ़िगर किया गया

चूंकि यह मणि एक रैक मिडलवेयर है, यह केवल वेब अनुरोधों के लिए काम करता है, न कि रेक कार्यों के लिए। मैं इसे रेक कार्यों के लिए भी सक्षम करना चाहता हूं और मुझे this gist मिल गया जो नौकरी करता है।

यह काम करता है, लेकिन यह सूखी, मुझे लगता है कि विधि में मणि विन्यास दोहराने की आवश्यकता नहीं है और मैं के रूप में भी एक ब्लॉक में उनके बयान संलग्न करने के लिए अपने सभी रेक कार्यों को बदलने के लिए

exception_notify { actual_task_code } 

वहाँ किसी भी है में की जरूरत है इसे हल करने का बेहतर तरीका?

पीएस अगर मुझे अधिसूचना मणि बदलने की जरूरत है तो कोई समस्या नहीं होगी क्योंकि मैंने अपनी परियोजना में कोड की केवल कुछ पंक्तियां जोड़ दी हैं।

पी.पी.एस. मुझे पता है कि मैं --trace विकल्प जोड़ने के लिए क्रोंटैब में रेक लाइन भी बदल सकता हूं, लेकिन मुझे यह समाधान पसंद नहीं है, क्योंकि अपवाद नोटिफ़ायर इम्हो एक बेहतर समाधान है जो वेब कोड में भी मदद करता है।

अद्यतन मुझे अभी यह संबंधित प्रश्न पता चला है: exception_notification for delayed_job लेकिन दोनों उत्तर एक ही चाल का उपयोग करते हैं।

मैं airbrake (पूर्व भेक के रूप में जाना जाता है) या असाधारण तरह एक ऑनलाइन सेवा के साथ प्रयास करने जा रहा हूँ, लेकिन उन दोनों को भुगतान कर रहे हैं सेवाओं ...

अद्यतन 2: मैं Airbrake App की कोशिश की, बहुत अच्छा आवेदन, लेकिन यह एक ही समस्या के लिए पीड़ित है, मुझे अभी भी रेक कार्यों से अपवादों को सूचित करने के लिए रेकैकाइल को हैक करने की आवश्यकता है। हालांकि हैक कम सूखा है क्योंकि आपको बस इस कोड की आवश्यकता है:

# notify exceptions 
def exception_notify 
    yield 
rescue Exception => exception 
    HoptoadNotifier.notify exception 
    raise exception 
end 

किसी कॉन्फ़िगरेशन पैरामीटर को दोहराने की कोई आवश्यकता नहीं है। मुझे लगता है कि रेक रेक कार्यों में अपवादों को अधिसूचित करने के लिए मैं इससे बेहतर नहीं कर सकता।

उत्तर

5

airbrake मणि patches Rake तो यह पहले से ही करता है मैं क्या पूछ रहा हूँ, बचाव अनुमति देने के लिए ...

+0

रेक त्रुटियों के लॉगिंग को सक्षम करने के लिए, आपको '' 'config.rescue_rake_exceptions = true''' को' '' conifg/startizers/airbrake.rb''' 'पंक्ति में जोड़ना होगा। – KurtPreston

1

इस सुझाव के लिए धन्यवाद; यह मेरे लिए बहुत अच्छा काम करता है क्योंकि इस समय मेरे पास केवल एक क्रॉन कार्य है।

यह शुष्क करने के लिए, आप APP_CONFIG के माध्यम से स्थिरांक में विन्यास बदल सकती है, शायद: https://github.com/cjbottaro/app_config

इसके अलावा, आप का विस्तार कर सकता है जो कुछ भी वर्ग exception_notify { } में सब कुछ लपेटो करने task :... do का ख्याल रखता है।

+1

मैं तुम्हें पिछले संकेत में दिलचस्पी रखता हूँ, तो आप एक छोटा सा विस्तार कर सकता है? – Fabio

+0

रेलवे ढांचे में गहराई से, रेक रेक कार्य कैसे काम करते हैं, आपको खोदना होगा। मैं या तो विवरण नहीं जानता। लेकिन आप जो चाहें उसे करने के लिए वर्गीकृत लोगों को बढ़ा सकते हैं। –

13

config/initializers में एक task.rb फ़ाइल है, जो बंदर पैच रेक :: टास्क # शामिल करने के लिए निष्पादित बनाएं upgrade_notify की कार्यक्षमता:

module Rake 
    class Task 
    alias :orig_execute :execute 
    def execute(args=nil) 
     orig_execute(args) 
    rescue Exception => exception 
     # Exception notification stuff 
    end 
    end 
end 

रेल 3.0.12, रेक 0.9.2.2 के साथ परीक्षण किया गया।

+1

कृपया ध्यान दें कि आपको "रेक/टास्क" की आवश्यकता है, या Rails कंसोल अब NameError के कारण नहीं चल पाएगा। –