2009-09-19 23 views
25

मैं हास्यास्पद रूप से लंबे समय के लिए इसका एक सरल उत्तर ढूंढ रहा हूं और ऐसा लगता है कि यह इतना स्पष्ट और सरल होना चाहिए क्योंकि किसी के पास कोई आसान, बेवकूफ सबूत ट्यूटोरियल नहीं है।बेसिक रेल 404 त्रुटि पृष्ठ

वैसे भी, मैं बस इतना करना चाहता हूं कि एक भी 404.html स्थैतिक पृष्ठ हो जो किसी भी त्रुटि को फेंकने पर लोड हो। आदर्श रूप से यह केवल उत्पादन और स्टेजिंग में होना चाहिए।

मुझे लगता है कि यह करना सबसे आसान काम होना चाहिए ... लेकिन मैं इसे समझ नहीं सकता।

किसी भी मदद की बहुत सराहना की जाती है।

+0

अच्छा प्रश्न @chishomer, मैं सबसे अच्छा जवाब दिया। जांच करे। http://stackoverflow.com/questions/1447627/basic-rails-404-error-page/8987083#answer-8987083 –

उत्तर

19

में अपने ApplicationController

unless ActionController::Base.consider_all_requests_local 
    rescue_from Exception, :with => :render_404 
end 

private 

    def render_404 
    render :template => 'error_pages/404', :layout => false, :status => :not_found 
    end 

अब error_pages/404.html की स्थापना की और वहाँ आप

जाना ... या शायद मैं अपवाद के साथ overcautious हूँ और तुम बजाय RuntimeError से बचाव करना चाहिए।

+1

उत्तर के लिए धन्यवाद, मैं यह भी जोड़ना चाहता था कि इस विषय पर मुझे एक इंडिपथ लेखन है http://www.perfectline.co.uk/blog/custom-dynamic-error-pages-in-ruby-on-rails – Schneems

+0

रेल 3 पर काम नहीं कर रहा है – hoyhoy

+2

यह काम करना चाहिए, हालांकि दस्तावेज कहता है आपको 'ActionController :: Base.consider_all_requests_local' के बजाय 'Rails.application.config.consider_all_requests_local' का उपयोग करना चाहिए। –

14

मेरा मानना ​​है कि यदि आप उत्पादन मोड में भागते हैं, तो जब भी यूआरएल के लिए कोई मार्ग नहीं होता है तो सार्वजनिक निर्देशिका में 404.html सेवा प्राप्त होती है।

2

आप 404 जब भी क्योंकि सभी त्रुटियों को 404 में परिणाम किसी भी त्रुटि फेंक दिया जाता है नहीं मिलेगा। यही कारण है कि आपकी सार्वजनिक निर्देशिका में 404, 422 और 500 पृष्ठ हैं। मुझे लगता है कि रेलों ने इन्हें सबसे आम त्रुटियों के रूप में समझा है। जैसा बेन ने कहा, 404 ऊपर आ जाएगा, जब यह कुछ है, जब आवेदन एक त्रुटि फेंकता नहीं मिल सकता है 500। दोनों के बीच, आप अपने कई अड्डों को कवर कर सकते हैं।

7

यदि आप उत्पादन मोड में भागते हैं, तो 404.html, 500.html, 422.html सार्वजनिक निर्देशिका में फ़ाइलों को जब भी संबंधित त्रुटि होती है, उपर्युक्त पृष्ठ दिखाए जाएंगे।

में रेल 3.1

हम नीचे की तरह उपयोग कर सकते हैं: रेल 3.1 स्वचालित रूप से सही HTTP स्थिति कोड के साथ एक प्रतिक्रिया उत्पन्न होगा (ज्यादातर मामलों में, यह है 200 ठीक)। स्थिति विकल्प यह बदलने के लिए:: आप उपयोग कर सकते हैं

प्रस्तुत करना: स्थिति => 500

प्रस्तुत करना: स्थिति =>: मना

Rails understands both numeric and symbolic status codes.

Fore more information see this page

चीयर्स!

0

ऐसा करने का एक और तरीका है निम्नलिखित के साथ अपने config/application.rb को विन्यस्त है:

module YourApp 
    class Application < Rails::Application 
    # ... 

    config.action_dispatch.rescue_responses.merge!(
     'MyCustomException' => :not_found 
    ) 
    end 
end 

तो है कि जब भी MyCustomException उठाया जाता है, रेल यह एक नियमित रूप से :not_found रूप में मानता है public/404.html प्रतिपादन।

इस स्थानीय रूप से परीक्षण करने के लिए, सुनिश्चित करें कि आप config/environments/development.rb को बदलने:

config.consider_all_requests_local = false 

और पढ़ें के बारे में config.action_dispatch.rescue_responses.

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