2011-12-12 15 views
5

में वैश्विक बचाव और लॉगिंग अपवाद अपवाद के मामले में मैं वैश्विक बचाव कैसे निर्दिष्ट करूं, और यदि आप एपीआई या एप्लिकेशन के लिए सिनात्रा का उपयोग करते हैं, तो आप लॉगिंग को कैसे संभालेंगे?सिनात्रा

उत्तर

6

404s not_found विधि जैसे जैसे की मदद से नियंत्रित किया जा सकता:

not_found do 
    'Site does not exist.' 
end 

500s जैसे एक ब्लॉक के साथ त्रुटि विधि बुला, द्वारा नियंत्रित किया जा सकता है:

error do 
    "Application error. Pls try later." 
end 

का ब्यौरा त्रुटि sinatra.errorrequest.env में इस तरह से पहुंचा जा सकता है:

error do 
    'An error occured: ' + request.env['sinatra.error'].message 
end 
+0

अगर यह 500 है तो अपवाद को पुनः प्राप्त करने के लिए मैं कैसे करूँ, मेरा मतलब है कि क्या गलत हुआ? धन्यवाद। – Jane

+0

@Jane मेरा अद्यतन उत्तर – maprihoda

4

मुझे अपने देव पर्यावरण में बॉक्स से बाहर काम करने में परेशानी हुई - इसे काम करने के लिए, मुझे show_exceptions को मेरे sinatra कॉन्फ़िगरेशन में झूठ बोलना पड़ा।

class BaseApp < Sinatra::Base 

    configure { set :show_exceptions, false } 

    error do |err| 
    raise "Error: #{err}" 
    end 

end 

यह सेटिंग, जब सही पर सेट किया, त्रुटि पृष्ठों कि पश्व-अनुरेखन और पर्यावरण से संबंधित जानकारी दिखा एक unhanded अपवाद तब होता है जब सक्षम बनाता है, लेकिन मैं इसे अक्षम करके केवल आग कस्टम त्रुटियों सकता है।

+1

देखें यह सही उत्तर है। यह कॉन्फ़िगरेशन लाइन के बिना काम नहीं करता है। – pmontrasio

+1

दरअसल, सामान्य त्रुटि ब्लॉक (यानी, कोई अपवाद वर्ग या स्थिति कोड) निष्पादित करने और वापस करने के लिए दोनों ': show_exceptions' और ': raise_errors' अक्षम होना चाहिए (यानी, झूठी पर सेट)। –

+0

ध्यान दें कि उदाहरण में 'त्रुटि' अपवाद का संदेश है, जिसे 'env [' sinatra.error '] द्वारा भी प्राप्त किया जा सकता है। संदेश'। –