Dynamic error pages in Rails 3 -


रेल 2.3.x में, आप render_optional_error_file की तरह ओवरराइड कर सकते हैं:

  # ApplicationController.rb संरक्षित def render_optional_error_file (status_code) रेंडर: टेम्पलेट = & gt; "त्रुटियों / 500",: स्थिति = & gt; 500,: लेआउट = & gt; 'एप्लिकेशन' एंड   

हालांकि, रेल 3 में अब render_optional_error_file नहीं है इसके बजाय, आप rescue_action_in_public है, जो आप की तरह कर सकते हैं ओवरराइड करने के लिए की जरूरत है ताकि:

  # config / initializers / error_page.rb मॉड्यूल ActionDispatch वर्ग ShowExceptions डीईएफ़ संरक्षित rescue_action_in_public (अपवाद) स्थिति = स्टेटसोड (अपवाद) .to_s टेम्पलेट = ActionView :: Base.new (["# {Rails.root} / ऐप / दृश्य"]) यदि ["404"]। शामिल करें (स्थिति) फ़ाइल = "/ त्रुटियों / 404.html.erb "else file =" /errors/500.html। एआरबी "एंड बॉडी = टेम्पलेट.रेडर (: फ़ाइल = & gt; फाइल) रेंडर (स्टेटस, बॉडी) एंड एंड एंड एंड   

यह काम करता है, लेकिन एप्लिकेशन के लेआउट का उपयोग नहीं करता है हालांकि, यदि आप इस तरह से लेआउट पथ निर्दिष्ट करते हैं:

  body = template.render (: file = & gt; फ़ाइल,: लेआउट = & gt; "लेआउट / एप्लिकेशन") # पंक्ति 15   

आप असफलता प्रतिक्रिया के दौरान एक त्रुटि प्राप्त करते हैं: ActionView :: Template :: Error

application.html.erb की पंक्ति 4: 4 है:

  & lt;% = stylesheet_link_tag "ऐप", "jquery-ui", "jquery.fancybox", : कैश = & gt; "सभी"% & gt;   

टेम्पलेट रेंडर करने के लिए सामान्यतः जो ActionView उपयोग करता है वह लोड नहीं हो रहा है।

स्टैक ट्रेस है:

  / var / lib /gems/1.8/gems/actionpack-3.0.5/lib/action_view/helpers/asset_tag_helper.rb:794:in 'शामिल' /var/lib/gems/1.8/gems/actionpack-3.0.5/lib/action_view/ सहायकों / asset_tag_helper.rb: 794: ` '` rewrite_asset_path /var/lib/gems/1.8/gems/actionpack-3.0.5/lib/action_view/helpers/asset_tag_helper.rb:817:in' rails_asset_id में / var / lib / रत्न / 1.8 / रत्न / actionpack-3.0.5 / lib / action_view / सहायकों / asset_tag_helper.rb: 746: `compute_public_path '/var/lib/gems/1.8/gems/actionpack-3.0.5/lib/action_view/helpers में `path_to_stylesheet /asset_tag_helper.rb:424:in '` ensure_stylesheet_sources /var/lib/gems/1.8/gems/actionpack-3.0.5/lib/action_view/helpers/asset_tag_helper.rb:875:in!' /var/lib/gems/1.8/gems/actionpack-3.0.5/lib/action_view/helpers/asset_tag_helper.rb:874:IN 'प्रत्येक' /var/lib/gems/1.8/gems/actionpack-3.0.5/ Lib / action_view / helpers / asset_tag_helper.rb: 874: `सुनिश्चित_ शैली शैल-स्रोतों में! ' /var/lib/gems/1.8/gems/actionpack-3.0.5/lib/action_view/helpers/asset_tag_helper.rb:512:in `stylesheet_link_tag '/ डेटा / साइटों / fundraisers के चरण / विज्ञप्ति / 20110316194843 / ऐप्स / विचारों / लेआउट / application.html.erb: 4: ` '/var/lib/gems/1.8/gems/actionpack-3.0.5/lib/action_view/template.rb:135:in` भेजें' / var / lib / _app_views_layouts_application_html_erb___19482063_70294907435920_0 में रत्न / 1.8 / रत्न / एक्शन पॅक-3.0.5 / लीब / एक्शन_व्यू / टेम्प्लेट। Rb: 135: `रेंडर '/var/lib/gems/1.8/gems/activesupport-3.0.5/lib/active_support/notifications.rb में : 54: `साधन '/var/lib/gems/1.8/gems/actionpack-3.0.5/lib/action_view/template.rb:127:in' रेंडर '/var/lib/gems/1.8/gems/actionpack -3.0.5 / lib / action_view / render / layouts.rb: 80: में `_render_layout '/var/lib/gems/1.8/gems/actionpack-3.0.5/lib/action_view/render/rendering.rb:62: `_render_template '/var/lib/gems/1.8/gems/activesupport-3.0.5/lib/active_support/notifications.rb:52:in' साधन '/var/lib/gems/1.8/gems/activesupport-3.0 में 5 / lib / active_support / सूचनाएं /instrumenter.rb:21:in 'साधन' /var/lib/gems/1.8/gems/activesupport-3.0.5/lib/active_support/notifications.rb:52:in 'साधन' /var/lib/gems/1.8 /gems/actionpack-3.0.5/lib/action_view/render/rendering.rb:56:in_render_template '/var/lib/gems/1.8/gems/actionpack-3.0.5/lib/action_view/render/rendering। आरबी: 26: `रेंडर '/ data/sites/fundraisers-stage/releases/20110316194843/config/initializers/error_pages.rb:15:in` बचाव_अनुक्रमणिका_ लोक'    

रेल 3.2 में, यह उससे आसान है:

इसे config / application.rb में जोड़ें:

  config.exceptions_app = self.routes   

इससे राउटर के माध्यम से त्रुटियां उत्पन्न हो सकती हैं फिर आप बस config / routes.rb में जोड़ें:

  मैच "/ 404",: to = & gt; "त्रुटि # not_found"   

मुझे इस जानकारी को ब्लॉग पोस्ट पर आइटम द्वारा # 3 से मिला है José Valim।

Comments