3

私は、アプリケーション内のエラーを処理するためにexception_notification gemを使用します。例外通知 - 自分のエラーページを表示する方法?

:私は2つの問題を抱えている

config.middleware.use ExceptionNotifier, 
    :email_prefix => "[MY APP| Error Report] ", 
    :sender_address => %{"MY APP" <[email protected]>}, 
    :exception_recipients => '[email protected]' 
end 

/config/enviroments/productions.rg

unless Rails.application.config.consider_all_requests_local 
    rescue_from Exception, 
       :with => :render_error 
    rescue_from ActiveRecord::RecordNotFound, 
       :with => :render_not_found 
    rescue_from ActionController::RoutingError, 
       :with => :render_not_found 
    rescue_from ActionController::UnknownController, 
       :with => :render_not_found 
    rescue_from ActionController::UnknownAction, 
       :with => :render_not_found 
    end 

    def render_not_found(exception) 
    ExceptionNotifier::Notifier 
     .exception_notification(request.env, exception) 
     .deliver 
    render :template => "/errors/404.html.erb", 
     :layout => 'errors.html.erb' 
    return  
    end 

    def render_error(exception) 
    ExceptionNotifier::Notifier 
     .exception_notification(request.env, exception) 
     .deliver 
    render :template => "/errors/500.html.erb", 
      :layout => 'errors.html.erb' 
    return 
    end 

私が持っているファイルの最後に: マイApplicationControllerには次のようになります

  1. アプリでエラーが発生したとき - たとえばArticle.find(not-existing-ID)/public/500.htmlから標準エラーページ(ERROR 500)を取得し、アプリケーションコントローラで指定されたファイルからは取得しません...どのように可能ですか?過去数時間、私は問題を見つけようとしましたが、それでも問題はわかりません。

  2. URLが存在しないページに設定すると、エラー番号404が表示されますが、この場合はこの問題に関する電子メール通知がありません。それを処理する方法はありますか?再び標準エラー404ページが表示され、2つ目は、/errors/404.html.erb

からではないページは誰も私にこれらの問題を解決するためにどのようにいくつかのアドバイスを与えてもらえますか?

答えて

3

あなたの最初の問題:

これは私の作品 - application_controller.rbから:

unless Rails.application.config.consider_all_requests_local 
    rescue_from Exception, with: :render_500 
    rescue_from ActionController::RoutingError, with: :render_404 
    rescue_from ActionController::UnknownController, with: :render_404 
    rescue_from ActionController::UnknownAction, with: :render_404 
    rescue_from ActiveRecord::RecordNotFound, with: :render_404 
end 

private 
    def render_404(exception) 
    ExceptionNotifier::Notifier.exception_notification(request.env, exception, 
     :data => {:User => current_user.full_name, :Email => current_user.email, :UserID => current_user.id}).deliver 
    @not_found_path = exception.message 
    respond_to do |format| 
     format.html { render template: 'pages/404', layout: 'layouts/application', status: 404 } 
     format.all { render nothing: true, status: 404} 
    end 
    end 
    def render_500(exception) 
    ExceptionNotifier::Notifier.exception_notification(request.env, exception, 
     :data => {:User => current_user.full_name, :Email => current_user.email, :UserID => current_user.id}).deliver 
    @error = exception 
    respond_to do |format| 
     format.html { render template: 'pages/500', layout: 'layouts/application', status: 500 } 
     format.all { render nothing: true, status: 500} 
    end 
    end 

注:私は/アプリ/ビューの私のカスタムエラーページを持っています/ページ。

unless Rails.application.config.consider_all_requests_local 
    match '*not_found', to: 'pages#404' 
    end 

あなた:500.html.hamlと404.html.haml

と呼ばれる私はまた私のroutes.rbをでこれを(「ページではなく、スラッシュの後ハッシュに注意してください)持っています2番目の問題: 問題2と同じ問題があります(404のメールは送信されません)。あなたはこれに対する解決策を見つけましたか?

PS。更新された手順はこちらをご覧ください:http://ramblinglabs.com/blog/2012/01/rails-3-1-adding-custom-404-and-500-error-pages

0

こんにちは、これは私のために働く!本番モードとキャッチ異なるレスキューエラーを使用して、レールのアプリを実行している場合、このコードをチェック

if Rails.env.production? 
    unless Rails.application.config.consider_all_requests_local 
    rescue_from Exception, with: :render_500 
    rescue_from ActionController::RoutingError, with: :render_404 
    rescue_from ActionController::UnknownController, with: :render_404 
    rescue_from ActionController::UnknownAction, with: :render_404 
    rescue_from ActiveRecord::RecordNotFound, with: :render_404 
    end 
end 

:あなたはこれらのコードを追加することができますapplication_controller.rbで

同じコントローラ "application_controller。「これらのコードを追加RB:

def render_404(exception) 
    @not_found_path = exception.message 
    respond_to do |format| 
     format.html { render template: 'errors/not_found', layout: 'layouts/application', status: 404 } 
     format.all { render nothing: true, status: 404 } 
    end 
    end 

    def render_500(exception) 
    logger.info exception.backtrace.join("\n") 
    respond_to do |format| 
     format.html { render template: 'errors/internal_server_error', layout:  'layouts/application', status: 500 } 
     format.all { render nothing: true, status: 500} 
    end 
    end 

これらのメソッドは、あなたのアプリがエラーをキャッチしたときに表示したいページを指定します、 は、名前のコントローラを作成します。errors_controller.rb を、あなたのアプリ/ビュー/エラーに は、名前のファイルを作成:

internal_server_error.html.erb
  • not_found.html.erbを

とあなたのroutes.rbを でこれらのコードを追加します。

match '/internal_server_error', :to => 'errors#internal_server_error' 
match '/not_found', :to => 'errors#not_found' 
関連する問題