ruby on rails - रेल 3 में गतिशील त्रुटि पेज




ruby-on-rails ruby-on-rails-3 (3)

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

# ApplicationController.rb
protected
  def render_optional_error_file(status_code)
    render :template => "errors/500", :status => 500, :layout => 'application'
  end

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

# config/initializers/error_page.rb
module ActionDispatch
  class ShowExceptions

    protected    
      def rescue_action_in_public(exception)
        status = status_code(exception).to_s

        template = ActionView::Base.new(["#{Rails.root}/app/views"])
        if ["404"].include?(status)
          file = "/errors/404.html.erb"
        else
          file = "/errors/500.html.erb"
        end        
        body = template.render(:file => file)

        render(status, body)
      end

  end
end

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

body = template.render(:file => file, :layout => "layouts/application") # line 15

Error during failsafe response: ActionView::Template::Error आपको एक Error during failsafe response: ActionView::Template::Error मिलती है Error during failsafe response: ActionView::Template::Error

Application.html.erb की लाइन 4: 4 है:

<%= stylesheet_link_tag "app", "jquery-ui", "jquery.fancybox", :cache => "all" %>

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

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

  /var/lib/gems/1.8/gems/actionpack-3.0.5/lib/action_view/helpers/asset_tag_helper.rb:794:in `join'
  /var/lib/gems/1.8/gems/actionpack-3.0.5/lib/action_view/helpers/asset_tag_helper.rb:794:in `rails_asset_id'
  /var/lib/gems/1.8/gems/actionpack-3.0.5/lib/action_view/helpers/asset_tag_helper.rb:817:in `rewrite_asset_path'
  /var/lib/gems/1.8/gems/actionpack-3.0.5/lib/action_view/helpers/asset_tag_helper.rb:746:in `compute_public_path'
  /var/lib/gems/1.8/gems/actionpack-3.0.5/lib/action_view/helpers/asset_tag_helper.rb:424:in `path_to_stylesheet'
  /var/lib/gems/1.8/gems/actionpack-3.0.5/lib/action_view/helpers/asset_tag_helper.rb:875:in `ensure_stylesheet_sources!'
  /var/lib/gems/1.8/gems/actionpack-3.0.5/lib/action_view/helpers/asset_tag_helper.rb:874:in `each'
  /var/lib/gems/1.8/gems/actionpack-3.0.5/lib/action_view/helpers/asset_tag_helper.rb:874:in `ensure_stylesheet_sources!'
  /var/lib/gems/1.8/gems/actionpack-3.0.5/lib/action_view/helpers/asset_tag_helper.rb:512:in `stylesheet_link_tag'
  /data/sites/fundraisers-stage/releases/20110316194843/app/views/layouts/application.html.erb:4:in `_app_views_layouts_application_html_erb___19482063_70294907435920_0'
  /var/lib/gems/1.8/gems/actionpack-3.0.5/lib/action_view/template.rb:135:in `send'
  /var/lib/gems/1.8/gems/actionpack-3.0.5/lib/action_view/template.rb:135:in `render'
  /var/lib/gems/1.8/gems/activesupport-3.0.5/lib/active_support/notifications.rb:54:in `instrument'
  /var/lib/gems/1.8/gems/actionpack-3.0.5/lib/action_view/template.rb:127:in `render'
  /var/lib/gems/1.8/gems/actionpack-3.0.5/lib/action_view/render/layouts.rb:80:in `_render_layout'
  /var/lib/gems/1.8/gems/actionpack-3.0.5/lib/action_view/render/rendering.rb:62:in `_render_template'
  /var/lib/gems/1.8/gems/activesupport-3.0.5/lib/active_support/notifications.rb:52:in `instrument'
  /var/lib/gems/1.8/gems/activesupport-3.0.5/lib/active_support/notifications/instrumenter.rb:21:in `instrument'
  /var/lib/gems/1.8/gems/activesupport-3.0.5/lib/active_support/notifications.rb:52:in `instrument'
  /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.rb:26:in `render'
  /data/sites/fundraisers-stage/releases/20110316194843/config/initializers/error_pages.rb:15:in `rescue_action_in_public'

अपवाद नोटिफ़ायर में मांग पर त्रुटि अधिसूचना शुरू करने के लिए notify_about_exception नामक एक विधि है।

class ApplicationController < ActionController::Base
  include ExceptionNotification::Notifiable

  rescue_from Exception, :with => :render_all_errors

  def render_all_errors(e)
    log_error(e) # log the error
    notify_about_exception(e) # send the error notification

    # now handle the page
    if e.is_a?(ActionController::RoutingError)
      render_404(e)
    else
      render_other_error(e)
    end
  end

  def render_404_error(e)
   # your code
  end

  def render_other_error(e)
   # your code
  end
end

मुझे भी ऐसी समस्या का सामना करना पड़ा है। समस्या attachment_fu मणि या प्लगइन की वजह से है। बस इसे अनइंस्टॉल करें और किसी अन्य प्लगइन या मणि का उपयोग अपनी समस्या का समाधान करेंगे।


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

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

config.exceptions_app = self.routes

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

match "/404", :to => "errors#not_found"

मुझे यह जानकारी ब्लॉग पोस्ट पर "# 5 में मेरी पांच पसंदीदा छिपी हुई विशेषताएं " जोस वैलीम द्वारा आइटम # 3 से मिली है।





actionview